[英]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
。
順便說一句:狀態欄使用固定值是一種代碼味道。 請改用相應的布局指南,例如safeAreaLayoutGuide
, topLayoutGuide
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.