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