簡體   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