Danny의 iOS 컨닝페이퍼
article thumbnail

시작

iOS + 16부터 UIScreen.main는 더 이상 사용되지 않는다는 메시지가 뜨네요.

(지원을 더 이상 안함 == 업데이트 없음 == 나중에 안씀)

 

사용은 가능하지만 그래도 메시지가 거슬리니까,

UIScreen.main을 사용하는 대신, 다른 방법으로 Screen의 크기를 구하는 방법을 알아봅시다.

 

 

방법 1

공식문서에서 하라는 대로 따라해보기 (정석?!)

guard let screen =  view.window?.windowScene?.screen else { return }

let screenSize = screen.bounds

 

 

방법 2

UIApplication를 통해 window 접근해서 사용하기!

guard let window = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return }
 
let screenSize = window.screen.bounds

 

 

extension으로 만들어 사용

정말 자주 사용해야 한다면, 이렇게 사용해도 될 것 같네요.

extension UIViewController {
    
    func screen() -> UIScreen? {
        // 이 방법은 Life Cycle을 고려해서 사용해줘야 한다. (view가 생성된 후, 사용해 줘야 합니다)
        // updateViewConstraints 또는 viewDidLayoutSubviews 이 정도 타이밍이 좋을 듯 싶다.
        return view.window?.windowScene?.screen
    }
}

 

방법1, 2을 합쳐서 사용하기

extension UIViewController {
    
    func screen() -> UIScreen? {
        guard let window = UIApplication.shared.connectedScenes.first as? UIWindowScene else {
            // 99.9% 확률로 실패할 일은 없을 것 같은데, 만약 실패 한다면 view로 접근하여 사용하기 (1번 방법)
            return view.window?.windowScene?.screen
        }
        
        // 2번 방법
        return window.screen
    }
}

 

 

 

 

 

반응형
profile

Danny의 iOS 컨닝페이퍼

@Danny's iOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!