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.33或0.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