systemLayoutSizeFitting(_:)不考虑十进制数的宽度或高度约束


let aView = UIView()
let width: CGFloat = 173.5
aView.widthAnchor.constraint(equalToConstant: width).isActive = true
print(aView.systemLayoutSizeFitting(CGSize(width: width, height: 0)))

输出(在iOS 13.7上,可能影响其他版本(:

(173.6666666666,0.0(

我发现使用0.330.66作为小数部分可以稍微减少输出错误,但仍然有不需要的重复数字,例如173.333333333334用于0.33

我还为高度限制复制了这个。使用UIView.layoutFittingCompressedSize作为大小也具有相同的错误输出。

这是一个错误,还是我对自动布局不了解?

UIKit无法在部分像素上绘制。

在具有@2x屏幕比例的设备上(如iPhone 11(,您的结果将是:

(173.5, 0.0)  // nearest half-of-a-point

在具有@3x屏幕比例的设备上(如iPhone 11 Pro(,您的结果将是:

(173.66666666666666, 0.0)  // nearest third-of-a-point

请注意,如果您尝试:

let width: CGFloat = 173.25

你会得到:

(173.33333333333334, 0.0)   // iPhone 11 Pro
(173.5, 0.0)                // iPhone 11

最新更新