관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] statusBarManager 개념 (#'statusBarFrame' was deprecated in iOS 13.0: Use the statusBarManager property of the window scene instead.) 본문

iOS 응용 (swift)

[iOS - swift] statusBarManager 개념 (#'statusBarFrame' was deprecated in iOS 13.0: Use the statusBarManager property of the window scene instead.)

jake-kim 2023. 10. 20. 01:54

statusBarManager 개념

  • 기존에 statusBar의 heigth를 구하려고 하면, statusBarFrame 이라는 기존에 있던 프로퍼티가 iOS13에서 deprecated되었다는 경고 메시지가 노출
UIApplication.shared.statusBarFrame.height

  • 애플은 iOS13+에서 statusBar에 대한 값을 관리하는 별도의 statusBarManager를 정의

  • UIStatusBarManager는 class 타입

https://developer.apple.com/documentation/uikit/uistatusbarmanager

  • 3가지의 프로퍼티가 존재
    • 여기서 statusBarFrame을 사용하면 height구하기도 가능

https://developer.apple.com/documentation/uikit/uistatusbarmanager

  • statusBarManager 사용법
    • UIWindowScene의 instance이므로, UIWindowScnene인스턴스를 가져와서 획득
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
    let statusBarManager = windowScene.statusBarManager {
    let height = statusBarManager.statusBarFrame.height
    print(height)
}
  • 기존 방식보다는 코드가 길어졌지만, statusBar를 전용으로 처리하며 이 인스턴스는 UIWindowScene안에서 가지고 있도록 애플이 변경한 것
// 이전 방식
let statusBarHeight = UIApplication.shared.statusBarFrame.height
        
// 새로운 방식
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
    let statusBarManager = windowScene.statusBarManager {
    let height = statusBarManager.statusBarFrame.height
    print(height)
}

UIApplication.shared.statusBarFrame이 deprecated되는 이유

  • 애플은 UIWindowScene의 책임을 더 크게 하고 있는 추세
    • 스크린 width를 구할 때, UIScreen.main.bounds를 쓰면 depreacted될 것이라고 경고 메시지를 주고 대신에 view.window?.windowScene?.screen.bounds.width를 쓰도록 유도 - 이전 포스팅 글 참고

* 참고

https://developer.apple.com/documentation/uikit/uistatusbarmanager

https://developer.apple.com/documentation/uikit/uiwindowscene/3213943-statusbarmanager

Comments