我正在尝试为tableviewcell内的图像设置长宽比,但由于iOS无法完成对宽度或高度的限制,而小数位数不同于.5或.0的情况,因此该设置已损坏。
总而言之,如果约束接近其值,或者舍入为舍去小数的值,该约束不会失败/中断?
我知道问题出在很多次尝试后,由于小数点,我将通过以下示例向您展示:
使用以下代码
postImage.heightAnchor.constraint(equalToConstant: 88.9).isActive = true
我收到以下错误:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000036067b0 UIImageView:0x7fb76fe397e0.height == 88.9 (active)>
视图层次结构,图像的大小为89
当我将高度设置为.5或.0时,它发生在我身上,它四舍五入到最接近的值.5或.0(如果我将其设置为88.6,则四舍五入为88.5,抛出错误),但是如果我设置的任何以.0或.5结尾的值都可以正常工作!
(我知道我可以将其设置为较低的优先级,但它可以给我带来更多意外行为)
(我正在以编程方式进行操作,无法通过Xib进行操作:))
编辑:整个日志:
(
"<NSLayoutConstraint:0x600000facd20 UIImageView:0x7fc98362fe80.height == 86.9 (active)>",
"<NSLayoutConstraint:0x600000facd70 V:|-(0)-[UIImageView:0x7fc98362fe80] (active, names: '|':UITableViewCellContentView:0x7fc98362f940 )>",
"<NSLayoutConstraint:0x600000face10 UIImageView:0x7fc98362fe80.bottom == UITableViewCellContentView:0x7fc98362f940.bottom - 8 (active)>",
"<NSLayoutConstraint:0x600000fad680 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fc98362f940.height == 95 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600000facd20 UIImageView:0x7fc98362fe80.height == 86.9 (active)>
答案 0 :(得分:1)
我相信您必须降低纵横比约束的优先级,以避免破坏约束消息。
而且,我认为您对nn.5
值的工作并不完全正确。
例如,...的比率为420:360
将视图的宽度设置为59
会导致自动布局高度计算
59.0 * 360.0 / 420.0 == 50.571428571428569
自动布局不会为您提供实际的视线高度50.571428571428569
...而是会将其舍入到最接近的.5
,即50.5
,即少于所要求的,这样您会得到错误。
使用:
59.4 * 360.0 / 420.0 == 50.914285714285718
它四舍五入到51
,比请求的大,并且您不要得到错误。
更多示例:
58.5 * 360.0 / 420.0 == 50.142857142857146 // rounds down -- error
58.4 * 360.0 / 420.0 == 50.057142857142857 // rounds down -- error
58.3 * 360.0 / 420.0 == 49.971428571428568 // rounds up -- NO ERROR
将纵横比约束更改为Priority: 999
会得到相同的大小结果(四舍五入到最接近的.5
),但不会抛出约束约束错误。
由于您将获得相同的实际大小,因此更改优先级将仅允许自动布局“执行正确的操作”,并且不会对布局产生任何其他影响。