iOS 상태 표시줄 높이를 프로그래밍 방식으로 가져오는 방법
현재 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외부에서 UI의 현재 방향을 확인하려면 다음과 같이 하십시오.UIViewController그리고.self.interfaceOrientation사용할 수 없음, 사용[UIApplication sharedApplication].statusBarOrientation.
iOS7용 업데이트.상태 표시줄의 시각적 스타일이 변경되더라도 상태 표시줄의 프레임은 그대로 유지됩니다.상태 표시줄에 대한 유일한 흥미로운 발견 - 공유: 당신의UINavigationBar의 타일 배경도 상태 표시줄에 표시되므로 흥미로운 디자인 효과를 얻거나 상태 표시줄에 색을 칠할 수 있습니다.이 역시 상태 표시줄 높이에 영향을 미치지 않습니다.

다음 질문에 대한 마틴의 제안을 따릅니다. iPhone 상태 표시줄 높이를 가져옵니다.
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;
Swift 3 또는 Swift 4:
UIApplication.shared.statusBarFrame.height
상태 표시줄의 높이는 일반적으로 20pt이지만 다음과 같은 경우에는 두 배가 될 수 있습니다.
- 전화 통화 중일 때(매우 일반적인 시나리오);
- 음성 녹음기, Skype 또는 유사한 앱이 배경에서 마이크를 사용하고 있을 때;
- 개인 핫스팟이 활성화된 경우;
그냥 해보세요, 그러면 당신이 직접 볼 수 있을 겁니다.높이를 20pt로 하드코딩하면 보통 작동하지 않을 때까지 작동합니다.
그래서 저는 H2CO3의 대답을 두 번째로 들었습니다.
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
편집 iOS 11에서 보기 콘텐츠를 맨 위에 배치하는 방법은 UIView입니다.safeAreaLayoutGuideUIView 설명서를 참조하십시오.
권장되지 않는 답변 iOS 7+를 대상으로 하는 경우, UIViewController에 대한 설명서는 ViewController의topLayoutGuide속성은 상태 표시줄의 맨 아래 또는 탐색 모음의 맨 아래(표시되는 경우)를 제공합니다.그것은 유용할 수 있으며, 이전의 많은 솔루션보다 확실히 덜 해킹됩니다.
iOS 13의 경우 다음을 사용할 수 있습니다.
UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame.height
상태 표시줄의 프레임이 화면의 좌표 공간에 있다는 것을 잊지 마십시오!가로 모드로 실행하면 너비와 높이가 바뀔 수 있습니다.가로 방향을 지원하는 경우 이 버전의 코드를 대신 사용하는 것이 좋습니다.
CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];
그러면 상태BarFrame의 높이 속성을 직접 읽을 수 있습니다.이 경우 'View(보기)'는 측정값을 사용하고자 하는 보기여야 하며, 대부분 응용 프로그램 창의 루트 보기 컨트롤러입니다.
참고로 전화 통화 중에 상태 표시줄이 더 커질 수 있을 뿐만 아니라 상태 표시줄이 의도적으로 숨겨져 있는 경우에는 0이 될 수도 있습니다.
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
}
UIApplication.shared.statusBarFrame.heightiOS 13에서 더 이상 사용되지 않습니다.
'statusBarFrame'은 iOS 13.0에서 더 이상 사용되지 않습니다. 대신 창 장면의 statusBarManager 속성을 사용하십시오.
다음과 같이 iOS 13에서 상태 표시줄 높이를 검색할 수 있습니다.
let statusBarHeight = view.window?.windowScene?.statusBarManager?.statusBarFrame.height
NB! 옵션이므로 폴백이 올바른지 확인하십시오.
화면 상태 표시줄 높이를 가져오는 빠른 방법은 다음과 같습니다.
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
이것들은 제 프로젝트의 표준 기능으로 포함되어 있습니다: https://github.com/goktugyil/EZSwiftExtensions
의 상태 으로 "iOS의 상태 표시줄 높이"입니다.20 pt.
더 많은 정보: http://www.idev101.com/code/User_Interface/sizes.html
방금 상태 표시줄 높이에 직접 액세스하지 않고 계산할 수 있는 방법을 찾았습니다.
탐색 막대 높이 - 상단 레이아웃 가이드 길이 = 상태 막대 높이
스위프트:
let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height
self.topLayoutGuide.length반투명 막대로 덮여 있는 맨 위 영역입니다.self.navigationController?.navigationBar.frame.height는 일반적으로 44pt인 상태 표시줄을 제외한 반투명 막대입니다.따라서 이 방법을 사용하면 전화 통화로 인한 상태 표시줄 높이 변경을 걱정하지 않고 쉽게 상태 표시줄 높이를 계산할 수 있습니다.
스위프트 5
UIA 응용 프로그램.shared.statusBarFrame.높이
다음의 단일 라인 코드를 사용하여 모든 방향에서 상태 표시줄 높이를 확인할 수 있으며, 표시 여부도 확인할 수 있습니다.
#define STATUS_BAR_HIGHT (
[UIApplicationsharedApplication].statusBarHidden ? 0 : (
[UIApplicationsharedApplication].statusBarFrame.size.height > 100 ?
[UIApplicationsharedApplication].statusBarFrame.size.width :
[UIApplicationsharedApplication].statusBarFrame.size.height
)
)
단순하지만 매우 유용한 매크로입니다. 추가 코드를 작성할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/12991935/how-to-programmatically-get-ios-status-bar-height
'programing' 카테고리의 다른 글
| 기존 Xcode 프로젝트에서 Git 사용 (0) | 2023.05.06 |
|---|---|
| 데이터베이스 목록을 로드하지 못했습니다. (0) | 2023.05.06 |
| 작업이 완료될 때까지 기다리는 중 (0) | 2023.05.01 |
| 문자열 리터럴과 문자열을 일치시키는 방법은 무엇입니까? (0) | 2023.05.01 |
| 오류: "설치 가능한 ISAM을 찾을 수 없습니다." (0) | 2023.05.01 |