基于屏幕高度子类化 NSLayoutConstraint 常量
Subclassing NSLayoutConstraint constant based on screen height
我有一个带有选项卡栏的项目,每个选项卡都有一个自定义导航栏。每个导航栏 UIView 都在情节提要中设置了高度约束常量。
我想继承这个 NSLayoutConstraint(用于 Nav 高度),以便它改变 iPhone X 的高度。导航栏需要在 iPhone X 上更高,由于我没有使用 "out of the box" 对象,因此需要手动设置我的约束。
本质上,我想在子类中做类似下面的事情,这样我就不必重复一堆代码和做不必要的出口:
override func viewWillLayoutSubviews() {
navBarHeightConstraint.constant = navBarHeightConstraintConstant()
}
func navBarHeightConstraintConstant() -> CGFloat {
switch(UIScreen.main.bounds.height) {
case 812: // iPhone X
return 90
default: // all others
return 64
}
}
我已经创建了子类,但不知道用什么方法来执行上面的代码。
class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {
// Nothing... yet!
}
我如何子类化 NSLayoutConstraint 以便它仅显示 iPhone X 的特定值?
您可以覆盖常量变量:
final class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {
override var constant: CGFloat {
set {
super.constant = newValue
}
get {
return navBarHeightConstant()
}
}
private func navBarHeightConstant() -> CGFloat {
switch (UIScreen.main.bounds.height) {
case 812:
return 90
default:
return 64
}
}
}
我有一个带有选项卡栏的项目,每个选项卡都有一个自定义导航栏。每个导航栏 UIView 都在情节提要中设置了高度约束常量。
我想继承这个 NSLayoutConstraint(用于 Nav 高度),以便它改变 iPhone X 的高度。导航栏需要在 iPhone X 上更高,由于我没有使用 "out of the box" 对象,因此需要手动设置我的约束。
本质上,我想在子类中做类似下面的事情,这样我就不必重复一堆代码和做不必要的出口:
override func viewWillLayoutSubviews() {
navBarHeightConstraint.constant = navBarHeightConstraintConstant()
}
func navBarHeightConstraintConstant() -> CGFloat {
switch(UIScreen.main.bounds.height) {
case 812: // iPhone X
return 90
default: // all others
return 64
}
}
我已经创建了子类,但不知道用什么方法来执行上面的代码。
class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {
// Nothing... yet!
}
我如何子类化 NSLayoutConstraint 以便它仅显示 iPhone X 的特定值?
您可以覆盖常量变量:
final class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {
override var constant: CGFloat {
set {
super.constant = newValue
}
get {
return navBarHeightConstant()
}
}
private func navBarHeightConstant() -> CGFloat {
switch (UIScreen.main.bounds.height) {
case 812:
return 90
default:
return 64
}
}
}