簡體   English   中英

調用NSLayoutConstraint的子類的c常量變量

[英]Calling NSLayoutConstraint's subclass'c constant variable

我創建了一個自定義類NSLayoutConstraint 我必須根據iOS版本更新最高約束的常量值。 但是NSLayoutConstraint都不會調用NSLayoutConstraint的常量變量。 我已經嘗試了很多方法,但是沒有得到調用。 下面是我的NSLayoutConstraint的自定義類的代碼:

override var constant: CGFloat {
    set {
        super.constant = newValue
    }
    get {
        return topConstraintConstant()
    }
}

fileprivate func topConstraintConstant() -> CGFloat {
    if #available(iOS 11.0, *) {
        return 0
    }else {
        return -20
    }
}

我創建了TableView的最大約束的IBOutlet並為其分配了自定義類。

您在上面的代碼中不干凈地覆蓋了屬性常量。 如果為constant分配一個值,則您的實現可能會返回一個不同的值。 此外,您知道NSLayoutConstraint使用getter還是ivar來訪問constant的值。 覆蓋外部類的屬性非常不安全,尤其是如果它們來自Apple。

這里不需要子類化NSLayoutConstraint 在極少數情況下,您應該這樣做。 您可以在普通約束下工作。 如果約束出口變量為topConstraint ,則可以使用

if #available(iOS 11.0, * ) {
    topConstraint.constant = 0.0
}
else {
    topConstraint.constant = -20.0
} 

viewDidLoad

順便說一句:狀態欄使用固定值是一種代碼味道。 請改用相應的布局指南,例如safeAreaLayoutGuidetopLayoutGuide等。

暫無
暫無

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

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