systemLayoutSizeFitting_ :)不考虑十进制数字的宽度或高度限制

问题描述

let aView = UIView()
let width: CGFloat = 173.5
aView.widthAnchor.constraint(equalToConstant: width).isActive = true
print(aView.systemLayoutSizefitting(CGSize(width: width,height: 0)))
@H_404_4@输出(在iOS 13.7上可能会影响其他版本)

@H_404_4@(173.66666666666666,0.0)

@H_404_4@我发现使用 0.33 0.66 作为小数部分会使输出错误率有所降低,但仍然有多余的重复数字,例如173.33333333333334 for 0.33

@H_404_4@我也出于高度限制而复制了此内容。使用UIView.layoutFittingCompressedSize作为大小也会产生相同的错误输出

@H_404_4@这是一个错误,还是我对自动版式一无所知?

解决方法

UIKit无法绘制局部像素。

在屏幕尺寸为<button class="btn-standard call-to-action">BUTTON</button>的设备上(例如iPhone 11),您的结果将是:

@2x

在屏幕尺寸为(173.5,0.0) // nearest half-of-a-point 的设备上(例如iPhone 11 Pro),您的结果将是:

@3x

请注意,如果您尝试:

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

您将获得:

let width: CGFloat = 173.25