2017-11-29 5 views
0

NavigationBar처럼 사용하는 headerview라는 UIView가 있습니다. 그것은 60의 일정한 크기와 왼쪽/오른쪽 레이아웃 제한이 0입니다. 안전 영역 레이아웃으로 인해 iPhone X를 제외한 모든 장치는 괜찮아 보입니다. 크기를 90으로 변경하면 iPhone X에서는 괜찮아 보이지만 다른 장치에서는 잘못 보입니다. 아래의 코드로 안전 영역의 높이를 계산하여 높이에 추가하지만 다른 장치에서는 작아 보입니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?iPhone X의 안전 영역 가이드로 UIView의 높이를 계산하십시오

if (@available(iOS 11.0, *)) { 
    UIWindow *window = UIApplication.sharedApplication.keyWindow; 
    CGFloat topPadding = window.safeAreaInsets.top; 
    self.headerViewHeight.constant = 46 + topPadding; 
} 
+0

'60 + topPadding '이 아니어야합니까? – Simon

+0

네, 그렇지만 topPadding이 44이기 때문에 제가 좋아할 때가 있습니다. 결과는 실제 크기보다 큰 104가 될 것입니다. –

답변

2

보십시오. 전화가 iPhoneX인지 확인 (이상 최고 패딩 0 iPhoneX 경우)

if (@available(iOS 11.0, *)) { 
    UIWindow *window = UIApplication.sharedApplication.keyWindow; 
    CGFloat topPadding = window.safeAreaInsets.top; 
    self.headerViewHeight.constant = (topPadding>0) ? 46+topPadding : 60; 
} 
+0

나는 이것과 같은 것을했고 그것은 효과가 있었지만 잘 모르겠다. 최선의 접근법이라면 : –

+0

그래 나는 또한 같은 생각이다. 제발 좀 조사 해봐. – user6788419

1

사용이 (SWIFT 3) : 그것은 다른 모든 장치에 대해 당신에게 표준 높이 (64)를 제공

constraint_heightTopBar.constant = UIApplication.shared.statusBarFrame.maxY + 44 

및 88 for iPhoneX. 귀하는 필요에 따라 '44'값을 조정할 수 있습니다.
상태 표시 줄 높이는 다른 장치의 경우 20이고 PhoneX의 경우 44입니다. 필요에 따라보기 높이를 설정하기 만하면됩니다.
모든 iOS 버전 및 모든 기기에서 작동합니다. :-)

objC의 경우 CGRectGetMaxY (프레임)를 사용하십시오.

관련 문제