현재 iPhone / iPad 상단의 상태 표시 줄 (시간, 배터리 및 네트워크 연결 포함)은 망막이 아닌 화면의 경우 20 픽셀이고 망막 화면의 경우 40 픽셀입니다.하지만 나중에 내 앱을 증명하고 싶습니다. 하드 코딩 값없이이를 확인할 수 있습니다. 프로그래밍 방식으로 상태 표시 줄의 높이를 파악할 수 있습니까?
답변
[UIApplication sharedApplication].statusBarFrame.size.height
. 그러나 모든 크기는 픽셀이 아닌 포인트 단위이므로 상태 표시 줄 높이는 항상 20입니다.
최신 정보. 이 답변이 도움이되었다고 판단되면 자세히 설명해야합니다.
상태 막대 높이는 실제로 다음과 같은 경우를 제외하고 20.0f 포인트와 같습니다 .
- 상태 표시 줄은
setStatusBarHidden:withAnimation:
방법 으로 숨겨졌으며 높이는 0.0f 포인트와 같습니다. - 여기서 @Anton이 지적했듯이 전화 응용 프로그램 외부에서 전화를 받거나 녹음 세션 상태 표시 줄 높이가 40.0f 포인트와 같습니다.
또한 뷰 높이에 영향을주는 상태 표시 줄이 있습니다. 일반적으로 뷰의 높이는 주어진 방향에서 상태 막대 높이를 뺀 화면 크기와 같습니다. 그러나 뷰가 표시된 후 상태 표시 줄에 애니메이션을 표시하거나 (표시하거나 숨기면) 상태 표시 줄이 프레임을 변경하지만 뷰 가 변경되지 않는 경우 상태 표시 줄 애니메이션 이후 (또는 이후 애니메이션 중 상태 표시 줄 높이는 애니메이션 시작시 최종 값으로 설정됩니다.
업데이트 2. 사용자 인터페이스 방향도 있습니다. 상태 표시 줄은 방향 값에 따라서 상태 표시 줄의 높이 값을 존중하지 않는 세로 모드 인 [UIApplication sharedApplication].statusBarFrame.size.height
을위한, (예, 기본 방향은 항상 세로, 앱의 Info.plist 말한다 상관없이입니다) 풍경 – [UIApplication sharedApplication].statusBarFrame.size.width
. 외부에 UIViewController
있고 self.interfaceOrientation
사용할 수 없을 때 UI의 현재 방향을 확인하려면을 사용하십시오 [UIApplication sharedApplication].statusBarOrientation
.
iOS7 용 업데이트. 상태 표시 줄 비주얼 스타일이 변경되었지만 여전히 존재하지만 프레임은 여전히 동일하게 작동합니다. 내가 얻은 상태 표시 줄에 대한 유일한 흥미로운 발견 – 공유 : 귀하 UINavigationBar
의 타일 배경은 상태 표시 줄에 바둑판 식으로 배치되어 흥미로운 디자인 효과를 얻거나 상태 표시 줄에 색상을 지정할 수 있습니다. 이것도 어떤 식 으로든 상태 표시 줄 높이에 영향을 미치지 않습니다.
답변
질문에 대한 Martin의 제안 과 함께 하십시오 : iPhone Status Bar Height 가져 오기 .
CGFloat AACStatusBarHeight()
{
CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
return MIN(statusBarSize.width, statusBarSize.height);
}
그리고 스위프트에서
func statusBarHeight() -> CGFloat {
let statusBarSize = UIApplication.shared.statusBarFrame.size
return Swift.min(statusBarSize.width, statusBarSize.height)
}
해킹처럼 보이지만 실제로는 매우 견고합니다. 어쨌든, 그것은 유일한 작동 솔루션입니다.
기존 답변
의 사용자 정의 하위 클래스로 이동하는 다음 코드는 UIViewController
거의 가로 방향을 지원하기 위해 작동했습니다. 그러나, 나는 작동하지 않는 코너 케이스 (오른쪽에서 회전 할 때> 거꾸로 된 왼쪽> 왼쪽)를 보았습니다.
BOOL isPortrait = self.interfaceOrientation == UIInterfaceOrientationPortrait;
CGSize statusBarSize = [UIApplication sharedApplication].statusBarFrame.size;
CGFloat statusBarHeight = (isPortrait ? statusBarSize.height : statusBarSize.width);
답변
이 시도:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
답변
스위프트 3 또는 스위프트 4 :
UIApplication.shared.statusBarFrame.height
답변
상태 표시 줄은 일반적으로 키가 20pt이지만 일부 상황에서는 두 배가 될 수 있습니다.
- 전화 통화 중일 때 (일반적인 시나리오 임);
- 보이스 레코더 또는 Skype 또는 유사한 앱이 백그라운드에서 마이크를 사용하는 경우
- 개인용 핫스팟이 활성화 된 경우;
그냥 해보면 직접 볼 수 있습니다. 높이를 20pt로 하드 코딩하면 일반적으로 작동하지 않을 때까지 작동합니다.
그래서 나는 두 번째 H2CO3의 대답 :
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
답변
편집
보기 컨텐츠의 맨 위에 놓을 위치를 결정하는 iOS 11 방법은 UIView의 safeAreaLayoutGuide
See UIView Documentation 입니다.
더 이상 사용되지 않는 답변
iOS 7 이상을 대상으로하는 경우, UIViewController에 대한 설명서는 viewController의 topLayoutGuide
속성이 상태 표시 줄의 하단 또는 탐색 표시 줄의 하단 (표시된 경우)을 제공하도록 권장합니다. 그것은 사용 중일 수 있으며, 이전의 많은 솔루션보다 확실히 해킹이 적습니다.
답변
상태 표시 줄의 프레임이 화면의 좌표 공간에 있다는 것을 잊지 마십시오! 가로 모드로 시작하면 너비와 높이가 바뀌는 것을 알 수 있습니다. 가로 방향을 지원하는 경우 대신이 버전의 코드를 사용하는 것이 좋습니다.
CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];
그런 다음 statusBarFrame의 height 속성을 직접 읽을 수 있습니다. 이 예에서 ‘보기’는 측정을 사용하려는보기 여야하며, 응용 프로그램 창의 루트보기 컨트롤러 일 가능성이 높습니다.
또한 전화 통화 중 상태 표시 줄이 더 커질뿐만 아니라 상태 표시 줄이 의도적으로 숨겨져 있으면 0이 될 수도 있습니다.