안녕하세요.
이번 글에서는 iOS에서 상태바 컬러를 변경하기 위해 StatusBar를 가져오는 코드가 iOS13에서는 가져올 수 없는 이슈가 있어 현재까지 찾은 방법을 공유하려고 합니다.
이슈
저는 현재 이 코드를 이용해서 StatusBar를 가져오고 있었는데
UIApplication.shared.value(forKey: "statusBar") as? UIView
Xcode11 GM Seed 2, iOS 13 환경에서 빌드하면 아래 로그가 찍히며 Crash가 발생합니다.
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window.
Use the statusBarManager object on the window scene instead.'
로그를 잘 읽어보면,
'해당 코드에서 statusBar를 가져올 수 없으니 window scene object의 statusBarManager 객체를 사용하라' 라고 적혀있습니다.
developer apple document로 가보면 https://developer.apple.com/documentation/uikit/uistatusbarmanager
StatusBar를 가져올 수 있는 프로퍼티가 없습니다 ㅠㅠ
현재까지 찾은 해결 방법
StatusBar Frame만큼 View를 그려서 addSubView하는 방식
let statusBarFrame = UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame
let statusBar = UIView(frame: statusBarFrame)
view.addSubView(statusBar)
혹시 해당 이슈를 좀 더 좋은 방법으로 해결하신 분 있으면 https://gist.github.com/gwangyonglee/53bcc00643e8237a97d0ce7eacb06134 comment 주시면 감사하겠습니다:)
'iOS Trouble Shooting' 카테고리의 다른 글
[iOS] iOS13 앱 푸시 장치 토큰(deviceToken) 관련 이슈 (0) | 2020.01.05 |
---|---|
[iOS] UITableView에서 리로드할 때 스크롤 포지션 어긋나는 이슈 (0) | 2020.01.05 |