2017-10-19 104 views
2

我有一個帶有選項卡欄的項目,以及每個選項卡的自定義導航欄。每個導航欄UIViews都有一個在故事板中設置的高度約束常量。基於屏幕高度對NSLayoutConstraint常量進行子類化

我想這個NSLayoutConstraint(導航高度)的子類,以便它改變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 
    } 
} 

我所創建的子類,但不要不知道用什麼方法來執行上面的代碼。

class NavHeightFixiPhoneXConstraint: NSLayoutConstraint { 

    // Nothing... yet! 

} 

我怎麼能繼承NSLayoutConstraint,以便它顯示的只是iPhone X特定的值?

回答

3

您可以覆蓋常量變量:

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

的等待,我只是得到「無法只讀屬性‘常量’重寫可變屬性」 ...... – Fattie

+0

你是對的;)的酒店吸氣和二傳手,所以你需要提供兩者。我會編輯我的答案。 –

+0

對 - 我在此期間想到了它! :) – Fattie