簡體   English   中英

UIImageView創建額外的寬度/高度約束

[英]UIImageView creates extra width/height constraints

當我在Xcode中調試視圖時,我的UIImageView具有以下自動布局約束:

在此處輸入圖片說明

我期望在視圖的設置器上將其寬度和高度初始化為6。 在調試時,這些約束應該是40而不是6。但是由於某種原因,(內容大小)的寬度和高度還有額外的約束,實際上是設置為40。

這是我imageViewdidSet的方法IBOutlet

@IBOutlet private weak var imageView: UIImageView! {
    didSet {
        if let widthConstraint = imageView.constraintForLayoutAttribute(.Width)
        {
            widthConstraint.constant = MinimumImageLength
            imageView.layoutIfNeeded()
        }
        else
        {
            let widthConstraint = NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: MinimumImageLength)
            NSLayoutConstraint.activateConstraints([widthConstraint])
        }

        if let heightConstraint = imageView.constraintForLayoutAttribute(.Height)
        {
            heightConstraint.constant = MinimumImageLength
            imageView.layoutIfNeeded()
        }
        else
        {
            let heightConstraint = NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: MinimumImageLength)

            NSLayoutConstraint.activateConstraints([heightConstraint])
        }
    }
}

如果存在,則將獲得寬度和高度約束,並設置其最小寬度。 注意,在我看來,我已經明確設置了這些寬度和高度約束,因此我的代碼從不輸入寬度和高度的else

為了獲得正確的約束,我使用以下函數:

extension UIView
{
    func constraintForLayoutAttribute(layoutAttribute: NSLayoutAttribute) -> NSLayoutConstraint?
    {
        let filteredArray = constraints.filter { $0.firstAttribute == layoutAttribute }

        return filteredArray.first
    }
}

稍后,我使用相同的函數獲取寬度/高度並更改兩個常量。 更新寬度/高度約束后,我調用layoutIfNeeded() (我也嘗試過通過不幸運地調用setNeedsUpdateConstraints()進行調試)。

有趣的是,如果我通過從UIImageView刪除圖像並僅設置背景顏色進行測試,約束就會按預期工作,從而可以看到正在發生的事情。

有誰知道為什么會這樣?

在仔細檢查我的函數constraintForLayoutAttribute: ,filteredArray屬性實際上由幾個約束組成。 我期望的寬度限制和其他兩個內容大小限制。

我不確定是否有改進方法的“解決方案”,但我只是決定為寬度和高度約束創建出口,並改用這些出口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM