我们能否在iOS 6自动布局生成的帧上产生CGRectIntegral的效果



iOS 6 自动布局非常方便。但是,自动生成的帧可能具有非整数值。如何使用自动布局强制最终帧位置和大小的整数输出?

自动布局比你想象的更聪明。

虽然自动生成的帧确实可以具有分数值,但它们是四舍五入以匹配设备的像素比率。在配备 Retina 显示屏 (2x) 的设备上,允许使用 0.5 的小数部分。在较旧的设备上,似乎根本没有任何分数值。

这意味着您将始终获得像素完美的布局。

不过,我花了很长时间才弄清楚这一点。 :)

我无法回答你的问题,除非你接受"否"作为答案。

使用手动布局时,我遇到了类似的问题,而不是使用自动布局。我的解决方案可能对某人有用。

此代码会将坐标舍入为屏幕比例。换句话说,在标准显示器上为整数,在视网膜显示屏上为一半(0.5;1;1.5;...)。

CGFloat roundToScreen(CGFloat value) {
    CGFloat scale = [[UIScreen mainScreen] scale];
    CGFloat result = round(value * scale) / scale;
    // example value: 3.61
    // on standard display: 4
    // on Retina display: 3.5
    return result;
}

以下是一些用于CGRectCGPointCGSize的辅助函数:

最新更新