代码之家  ›  专栏  ›  技术社区  ›  Joe

基于屏幕高度的NSLayoutConstraint常量子类化

  •  4
  • Joe  · 技术社区  · 7 年前

    我有一个带有选项卡栏的项目,每个选项卡都有一个自定义导航栏。每个导航栏视图都在情节提要中设置了高度约束常量。

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

    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 回复  |  直到 7 年前
        1
  •  12
  •   Francesco Deliro    4 年前

    可以重写常量变量:

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