基于屏幕高度子类化 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
        }
    }
}