[英]iOS programmatically aspect ratio constraint gets broken in UITableviewcell
我正在尝试为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)>
我相信您必须降低长宽比约束的优先级,以避免破坏约束消息。
而且,我认为您对nn.5
值的工作并不完全正确。
例如...比率为420:360
:
将视图的宽度设置为59
导致自动布局高度计算
59.0 * 360.0 / 420.0 == 50.571428571428569
自动布局不会为您提供实际的视图高度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
),但不会引发破约束错误。
由于您将获得相同的实际大小,因此更改优先级将仅允许自动布局“执行正确的操作”,并且不会对布局产生任何其他影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.