답변:
[UIApplication sharedApplication].statusBarFrame.size.height
. 그러나 모든 크기는 픽셀이 아닌 포인트 단위이므로 상태 표시 줄 높이는 항상 20입니다.
최신 정보. 이 답변이 도움이되었다고 판단되면 자세히 설명해야합니다.
상태 막대 높이는 실제로 다음과 같은 경우를 제외하고 20.0f 포인트와 같습니다 .
setStatusBarHidden:withAnimation:
방법 으로 숨겨졌으며 높이는 0.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);
statusBarFrame
변환 전의 값으로 반환됩니다.
var statusBarHeight: CGFloat
이 시도:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
상태 표시 줄은 일반적으로 키가 20pt이지만 일부 상황에서는 두 배가 될 수 있습니다.
그냥 해보면 직접 볼 수 있습니다. 높이를 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이 될 수도 있습니다.
화면 상태 표시 줄 높이를 얻는 신속한 방법은 다음과 같습니다.
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
이들은 내 프로젝트에서 표준 기능으로 포함됩니다 : https://github.com/goktugyil/EZSwiftExtensions
var statusHeight: CGFloat!
if #available(iOS 13.0, *) {
statusHeight = UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame.height
} else {
// Fallback on earlier versions
statusHeight = UIApplication.shared.statusBarFrame.height
}
iOS의 상태 표시 줄 높이는 기본적으로입니다 20 pt
.
추가 정보 : http://www.idev101.com/code/User_Interface/sizes.html
방금 상태 표시 줄 높이에 직접 액세스 할 수는 없지만 계산하는 방법을 찾았습니다.
탐색 막대 높이-topLayoutGuide 길이 = 상태 표시 줄 높이
빠른:
let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height
self.topLayoutGuide.length
반투명 막대로 덮여있는 상단 영역이며 self.navigationController?.navigationBar.frame.height
상태 막대를 제외한 반투명 막대이며 일반적으로 44pt입니다. 따라서이 방법을 사용하면 전화 통화로 인한 상태 표시 줄 높이 변경에 대한 걱정없이 상태 표시 줄 높이를 쉽게 계산할 수 있습니다.
self.topLayoutGuide.length
0이므로 결과는 -44입니다.
다음 한 줄 코드를 사용하면 상태 표시 줄 높이를 모든 방향에서 볼 수 있는지 여부를 알 수 있습니다
#define STATUS_BAR_HIGHT (
[UIApplicationsharedApplication].statusBarHidden ? 0 : (
[UIApplicationsharedApplication].statusBarFrame.size.height > 100 ?
[UIApplicationsharedApplication].statusBarFrame.size.width :
[UIApplicationsharedApplication].statusBarFrame.size.height
)
)
간단하지만 매우 유용한 매크로입니다. 추가 코드를 작성할 필요가 없습니다.