根据屏幕高度子类化NSLayoutConstraint常量

Joe*_*Joe 3 subclass ios nslayoutconstraint swift iphone-x

我有一个带有选项卡栏的项目,并且每个选项卡都有一个自定义导航栏。每个导航栏UIView在情节提要中都设置了一个高度限制常数。

我想将此NSLayoutConstraint子类化(用于Nav高度),以便它更改iPhone X的高度。导航栏在iPhone X上需要更高,并且因为我没有使用“开箱即用”的功能对象,我的约束需要手动设置。

本质上,我想在子类中执行以下操作,因此无需重复执行一堆代码并避免不必要的出口:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经创建了子类,但是不知道使用什么方法来执行上述代码。

class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {

    // Nothing... yet!

}
Run Code Online (Sandbox Code Playgroud)

我如何子类化NSLayoutConstraint以便它仅显示iPhone X的特定值?

Fra*_*iro 7

您可以覆盖常量变量:

class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {

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

    fileprivate func navBarHeightConstant() {
        switch (UIScreen.main.bounds.height) {
         case 812:
            return 90
         default: 
             return 64
        }
        layoutIfNeeded()
    }
}
Run Code Online (Sandbox Code Playgroud)