2017-10-19 13 views
2

私は、タブバーと各タブのカスタムナビゲーションバーを持つプロジェクトを持っています。各ナビゲーションバーのUIViewには、ストーリーボードに高さ制約定数が設定されています。スクリーンの高さに基づいてNSLayoutConstraint定数をサブクラス化する

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

が、ドン上記のコードを実行するためにどのようなメソッドを使用するかはわかりません。それだけでiPhone Xの特定の値が表示されるように、私はNSLayoutConstraintをサブクラス化するにはどうすればよい

class NavHeightFixiPhoneXConstraint: NSLayoutConstraint { 

    // Nothing... yet! 

} 

答えて

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

関連する問題