티스토리 뷰

UIWindow를 사용했더니 Status Bar가 사라졌다…

간혹 UIWindow를 사용할 일이 생기는데, UIWindow에 특정 뷰를 subview로 추가했더니 status bar가 사라지는 일이 간혹 발생한다. 분명 별다른 작업을 안한거 같은데도 이러한 일이 발생해 제법 당황하는 경우가 종종 생기는데 본인의 경우에는 모든 뷰에서 공통 적으로 사용 가능한 custom alert 창을 만들었을 때 이러한 경우가 발생하였다.



우선 본인이 작성하였던 아래의 코드를 먼저 보면서 확인해 보도록 하자.

var window: UIWindow?

func showCustomPopupView {
    window = UIApplication.sharedApplication().keyWindow
    window!.windowLevel = UIWindowLevelAlert
    window!.makeKeyAndVisible()
    window!.addSubview(self.view)
    window!.accessibilityViewIsModal = true
}

보기에는 별문제 없는 UIWindow에 view를 추가하는 단순한 코드이다. 이 팝업뷰를 호출하면 정상적으로 UIWindow에 뷰가 추가되고 원하는 팝업창을 어디서나 확인할 수 있는데 status bar가 사라지는 문제가 있었다. 심지어 이 팝업창이 닫히고 난 후에도 앱을 종료하기 전까지는 계속해서 status bar 가 다시 나타나지 않았다.


문제는 바로 이 코드에 있었다.

window!.windowLevel = UIWindowLevelAlert

여기서 지정해주는 UIWindowLevelAlert는 status bar와 같은 z 좌표에 위치하는, 말 그대로 최상단에 위치하도록 지시하는 문구이다. 일반적인 view의 경우 windowLevel의 default 값은 UIWindowLevelNormal 이다.


이제 다시 status bar를 보여주기 위한 방법은 매우 간단해졌다. 단순히 window!.windowLevel = UIWindowLevelAlert를 지워주거나, 팝업 창이 보이는 동안에는 status bar를 사라지게 했다가 팝업 창이 닫힐 때 다시 status bar를 보여주고 싶다면 팝업 창이 닫히는 부분에서 windowLevel을 UIWindowLevelNormal로 재설정 해주면 된다.


팝업 창이 닫히는 부분의 코드를 어찌해야 할지 감이 잡히지 않는 사람들을 위해 간단한 코드를 작성해두었다.

func closeCustomPopupView {
    self.dismissViewControllerAnimated(true, completion: nil)
    self.view.removeFromSuperview()
    window!.windowLevel = UIWindowLevelNormal
}


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday