调用NSLayoutConstraint的子类的c常量变量
Calling NSLayoutConstraint's subclass'c constant variable
我创建了 NSLayoutConstraint
的自定义 class。我必须根据 iOS 版本更新顶部约束的常量值。但是 NSLayoutConstraint
的常量变量无论如何都不会被调用。我尝试了很多方法,但没有被调用。下面是我的 NSLayoutConstraint 自定义代码 class:
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 并为其分配了自定义 class。
您在上面的代码中不干净地覆盖了 属性 常量。如果您为 constant
分配一个值,您的实现可能 return 一个不同的值。此外,您无法 知道NSLayoutConstraint
是否使用getter 或ivar 来访问constant
的值。覆盖外国的属性 类 是非常不安全的,尤其是当它们来自 Apple 时。
子类化 NSLayoutConstraint
在这里没有必要。在极少数情况下,您应该这样做。您可以使用普通约束。如果你的约束出口变量是topConstraint
你可以使用
if #available(iOS 11.0, * ) {
topConstraint.constant = 0.0
}
else {
topConstraint.constant = -20.0
}
在 viewDidLoad
.
顺便说一句:为状态栏使用固定值是一种代码味道。请改用 safeAreaLayoutGuide
、topLayoutGuide
等适当的布局指南。
我创建了 NSLayoutConstraint
的自定义 class。我必须根据 iOS 版本更新顶部约束的常量值。但是 NSLayoutConstraint
的常量变量无论如何都不会被调用。我尝试了很多方法,但没有被调用。下面是我的 NSLayoutConstraint 自定义代码 class:
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 并为其分配了自定义 class。
您在上面的代码中不干净地覆盖了 属性 常量。如果您为 constant
分配一个值,您的实现可能 return 一个不同的值。此外,您无法 知道NSLayoutConstraint
是否使用getter 或ivar 来访问constant
的值。覆盖外国的属性 类 是非常不安全的,尤其是当它们来自 Apple 时。
子类化 NSLayoutConstraint
在这里没有必要。在极少数情况下,您应该这样做。您可以使用普通约束。如果你的约束出口变量是topConstraint
你可以使用
if #available(iOS 11.0, * ) {
topConstraint.constant = 0.0
}
else {
topConstraint.constant = -20.0
}
在 viewDidLoad
.
顺便说一句:为状态栏使用固定值是一种代码味道。请改用 safeAreaLayoutGuide
、topLayoutGuide
等适当的布局指南。