본문 바로가기
앱/iOS(Swift)

[Swift] SceneDelegate 를 이용한 Window statusBar 접근법

by 리드맥 2022. 1. 13.
  • SceneDelegate
   class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?
    var statusBarView = UIView()
     func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options
                connectionOptions: UIScene.ConnectionOptions) {
      //스테이터스바 크기 가져옴
        statusBarView.frame =  window?.windowScene?.statusBarManager?.statusBarFrame ?? .zero
     }
   }
  • extension: SceneDelegate는 여러 뷰컨트롤러에서 사용하기 때문에 extension으로 어디서든지 접근할 수 있게 하는게 편하다고 합니다
extension UIViewController {
    var statusBar: UIView? {
        //status bar design  scene는 싱글톤 느낌으로 같이 사용가능
        //scenedelegate 접근
        let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate
        
        
        let window = UIApplication.shared.windows.filter{$0.isKeyWindow}.first
        
        
        //윈도우에 올리면 다른 뷰컨트롤러에 가도 설정되어 있음
        //한번만 해주면 됨
        if let hasStatusBar = sceneDelegate?.statusBarView {
        window?.addSubview(hasStatusBar)
//            self.view.addSubview(hasStatusBar)
        }
        return sceneDelegate?.statusBarView
    
    }
}

DetailViewController

class DetailViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
       
        self.navigationController?.navigationBar.backgroundColor = .yellow
         
        self.statusBar?.backgroundColor = .yellow
    }
    
}
  • 이렇게 safeArea 위쪽으로 접근을 할 수 있습니다

댓글