繁体   English   中英

iOS以编程方式在UITableviewcell中打破了宽高比约束

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM