Things take time

[SWIFT] iOS 13대응 - UI(Modal 뷰, Present, 다크모드, StatusBar Color) 본문

iOS (기능)

[SWIFT] iOS 13대응 - UI(Modal 뷰, Present, 다크모드, StatusBar Color)

겸손할 겸 2019. 9. 24. 15:49

안드로이드 오류만 주구장창 잡고있다가 오랜만에 업데이트가 있네?

안드로이드 보는줄? 뷰 컨트롤러가 겹쳐있네?
다크모드 하고 들어와보니 내가 치는 타자는 어디갔으며, 위에 있던 TextField 글씨 색도 사라졌다

이것은 또 무엇인가.

올해도 역시나 미리 대응하지 못하고, 뒤늦게서야 부랴부랴 자료를 찾아본다.

 

Swift UI는 차차 해나가면 될 것 같지만, 불부터 꺼야지

 

1. 뷰 컨트롤러의 Madality 변경!

안드로이드에서 액티비티를 전환할 때, History를 사용하게 되면 첫 번째 사진처럼 되는데, 그 모습을 보는듯 했다.

기존에 사용하던 present(ViewController, ..)를 사용할때 마다 저렇게 대응된다고 한다. 새로운 옵션이 생겼으니 적용하자.

 

https://sarunw.com/posts/modality-changes-in-ios13

 

Modality changes in iOS13

Modality changes in iOS13 What you need to know when building your app against new SDK September 1, 2019 One behavior that changed and might break your old app once you starting adopting new iOS 13 is the modal presentation. What changes? So with iOS 13, d

sarunw.com

if let vc = storayBoard.instantiateViewController(withIdentifier: "AuthCountryViewController") as? AuthCountryViewController{
  vc.modalPresentationStyle = .fullScreen
  self.present(vc, animated: false, completion: nil)
}

modalPresentationStyle의 기본 Default가 Page Sheet라는 것인데, 이 것이 흔히 말하는 먼저 열었던 뷰를 보여주는 것이다. 이를 덮을 수 있도록 fullScreen으로 변경한다.

 

하나의 뷰 컨트롤러 클래스 안에서, 여러개의 present를 공통 방식으로 사용한다면 present를 오버라이드 하여 사용하는 것도 좋다.

    override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
        viewControllerToPresent.modalPresentationStyle = .fullScreen
        super.present(viewControllerToPresent, animated: flag, completion: completion)
    }

단, 배경이 투명해야할 경우 .fullScreen대신 .overFullScreen

UIModalPresentationOverFullScreen

으로 세팅한다!

 

2. 다크모드

iOS가 13이되면서, 다크모드를 지원하게 되었는데 그에 따라 기존 컬러값들에 비상이 생겼다. 다크모드를 설정할 경우, 백그라운드의 컬러값이 적용되지 않은 뷰들이 다크모드의 Default값을 따르게 된다.

그래서 두 번째 스크린샷에서 보는 것처럼 UITextField, UITextView같은 애들이 백그라운드 컬러값이 없기 때문에 저런 현상이 나타난다.

 

간단히 말해서 해결법은 백그라운드에 컬러값을 주면 된다.

 

이렇게 하면 색이 나오게 됨

각각의 모든 백그라운드 컬러값을 기획 디자이너와 협의후에 맞추면 될 일이지만 뷰가 많을 수록, 사용되는 컴퍼넌트가 많을수록 공수는 많다.

아니면 다크모드는 지원하지 않도록 하는 방법은 다음과 같다.

AppDelegate의 didFinishLaunchingWithOptions함수에

        if #available(iOS 13.0, *){
            self.window?.overrideUserInterfaceStyle = .light
        }

혹은 Info.plist에

위와 같이 세팅하면 된다.

 

3. StatusBar

상단 StatusBar의 색상이 흰색이 되어 시계도 보이지 않고 이상해졌다

기본 StatusBar.Default가 흰색이 되었다. 기본 라이트모드에서 봤을 때 흰색이고, 다크모드로 가면 기존에있던 것으로 보이므로, 스테이터스바 부분은 다크모드를 따른다.

방법은 다음과 같다.

 

프로젝트뷰? 타겟 눌렀을 때 나오는 그 화면!! General있고 Info있고 Build Settings있는.. 그 뷰!!

거기서 General에서 위와 같이 세팅한다.

 

이 말고도 많이 있는데, 각기 잘 찾아서 처리하시길

 

[참고 블로그,티스토리]

 

https://sesang06.tistory.com/138

 

iOS 13을 대응해야 하는 개발자가 알아야 하는 8가지 급한 불 리스트

iOS 13 릴리즈는 9월 10일에서 9월 20일로 예상됩니다. iOS 13 에 맞추어 대응해야 하는 리스트를 정리했습니다. 1. Modal Presentation Style에 automatic 추가 대응 iOS 13 부터 'automatic' 이 새로 생겨났습니..

sesang06.tistory.com

https://cafe.naver.com/mcbugi

 

맥부기 애플(Apple OS) 개발자 모임 : 네이버 카페

아이폰 앱스토어 Xcode 아이패드 ObjectiveC Cocoa Mac iPhone iPodTouch 개발 OpenGl-ES iPad iTV Swift

cafe.naver.com