2017-10-19 21 views
2

저는 탭바가있는 프로젝트와 각 탭에 대한 사용자 정의 탐색 막대가 있습니다. 탐색 표시 줄 UIView 각각에는 스토리 보드에 높이 제한 상수가 설정되어 있습니다.화면 높이에 따라 NSLayoutConstraint 상수를 서브 클래 싱하기

이 NSLayoutConstraint (Nav 높이)를 하위 클래스로 지정하여 iPhone X의 높이를 변경합니다. 탐색 표시 줄은 iPhone X에서 훨씬 더 커야하고 "out 상자의 "개체, 내 제약 조건을 수동으로 설정해야합니다. 기본적으로

, 나는 서브 클래스에 다음과 같은 일을 할, 그래서 불필요한 콘센트 코드의 무리를 반복 할 필요가 없습니다 : 나는 서브 클래스를 생성 한

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! 

} 
그냥 아이폰 X에 대한 특정 값을 표시하도록

가 어떻게 NSLayoutConstraint을 하위 클래스로 할 수 있습니까?

답변

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

대기, 나는 그냥 "읽기 전용 속성 '상수'로 변경 가능한 속성을 재정의 할 수 없습니다"GET을 ... – Fattie

+0

당신은 맞다) 재산은 게터있다 그리고 세터 모두에게 제공해야합니다. 나는 내 대답을 편집 할 것이다. –

+0

오른쪽 - 나는 그 동안 그것을 이해했다! :) – Fattie