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

时间:2017-10-19 19:58:06

标签: ios swift subclass nslayoutconstraint iphone-x

我有一个带标签栏的项目,以及每个标签的自定义导航栏。每个导航栏UIViews都在故事板中设置了高度约束常量。

我想将这个NSLayoutConstraint(导航高度)子类化,以便它改变iPhone X的高度。导航栏需要在iPhone X上更高,因为我没有使用& #34;开箱即用"对象,我的约束需要手动设置。

基本上,我想在子类中执行类似下面的操作,因此我不必重复一堆代码并制作不必要的插件:

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显示特定值?

1 个答案:

答案 0 :(得分:5)

您可以覆盖常量变量:

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()
    }
}