Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Notification
- github
- Swift
- SwiftUI
- Firebase
- window
- MacOS
- rxswift
- IOS
- 개발자
- iOS16
- JPA
- FLUTTER
- Xcode
- Python
- Apple
- stack
- Archive
- Code
- 한글
- Session
- darkmode
- view
- Git
- error
- appstore
- UIButton
- 웹뷰
- Realm
- mac
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
iOS ) iOS16 present 버그 - EEYatHo iOS 본문
반응형
iOS16 에서 특정 조건을 만족하는 케이스에서 present 시 UI 가 깨진다.
버그 조건 설명
- iOS16
- 디바이스의 orientation 과, 앱에서 인지하는 orientation 이 다른 상황
- modalPresentStyle 이 pageSheet 와 formSheet 가 아닌 viewController 를 present
구현 영상 with gif
iOS16 시뮬레이터에서,
디바이스의 방향은 potraits, 앱의 방향은 landscape 로 바꾼 뒤, ( 그 반대도 버그가 발생한다. )
modalPresentStyle 을 overFullScreen 으로 present 하는 gif 이다.
앱의 orientation 를 무시하고 디바이스의 orientation 에 맞게 present 되어버린다.
- home Indicator 와 status bar 의 orientation 이 이상하다. ( landscape 인 채로 남아있다. )
- UX 가 이상하다. ( 앱의 방향이 landscape 에서, portraits 로 순식간에 바뀐다. )
- 뒤에있던 VC의 UI 가 깨진다. ( 재현용 앱은 간단해서 멀쩡해 보이지만, 사내 앱에서 처참하게 깨졌다.. )
( * landscapeButton 을 눌러서, 앱의 방향을 바꾼 코드는 아래와 같다. )
@objc private func landscapeButtonDidTab() {
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: .landscapeRight))
}
present 버그가 발생한 상태의 특징
- UIDevice 는 portrait 로 나온다. ( UIDevice.current.orientation )
- statusBar 는 landscape 로 나온다. ( UIApplication.shared.statusBarOrientation )
- 앱은 landscape 로 인식한다. ( 코드로 landscape 로 돌릴 때 무반응, portrait 로 돌리면 반응한다. )
임시방편 해결법
- 특이하게도, 전체를 덮지 않고 부모 뷰를 뒤로 밀어내는(?) 방식의 modalPresatationStyle 은 잘 작동한다.
- 잘 작동 하는 style : pageSheet, formSheet
- 버그가 발생하는 style : fullScreen, overFullScreen, currentContext, overCurrentContext, popover, none, automatic
- UIDevice.current.orientation 와, UIApplication.shared.statusBarOrientation 가 다를 때는,
pageSheet, formSheet 를 사용하도록 하여 일단 해결하였다.
- 해당 버그를 해결법은 고사하고, 발견한 reference 조차 없다.
앱의 방향을 디바이스와 다르게 강제적으로 회전하고, 심지어 present 까지하는 앱이 잘 없기 때문이다. ( 발견 조건 까다로움 )
ex ) 디바이스가 portrait 인 상태에서, 영상을 전체화면으로 보여주기 위해 강제로 landscape 로 바꾸고, 거기서 다른 영상이나 영상의 정보를 보여주기 위해 다른 vc를 present 하는 경우에 발생한다..
- 근본적인 Solution 을 알게되면 내용을 추가한다.
'iOS, Swift > Tip, Bug, Swift Error' 카테고리의 다른 글
Swift ) NSURLErrorDomain Code=-1103 - EEYatHo iOS (0) | 2022.11.10 |
---|---|
Swift ) com.apple.CoreHaptics Code=-4805 - EEYatHo iOS (0) | 2022.10.28 |
iOS ) Archive 후 Appstore Uplaod 시 에러 - EEYatHo iOS (0) | 2022.10.04 |
Swift ) iOS16 강제 화면 회전 대응 - EEYatHo iOS (0) | 2022.10.04 |
Swift ) iOS16 네비게이션바 변경사항 - EEYatHo iOS (0) | 2022.09.15 |
Comments