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
- github
- Code
- Apple
- 웹뷰
- Firebase
- JPA
- Python
- Swift
- darkmode
- appstore
- stack
- SwiftUI
- UIButton
- error
- MacOS
- rxswift
- iOS16
- Session
- Notification
- Realm
- window
- Xcode
- mac
- Git
- 한글
- Archive
- 개발자
- IOS
- view
- FLUTTER
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
Swift ) iOS16 네비게이션바 변경사항 - EEYatHo iOS 본문
반응형
배경 설명
아래처럼, 네비게이션바에 커스텀 뷰를 넣는 식으로 사용하고 있었는데
navigationItem.titleView = myCustomView
iOS16 에서 네비게이션바의 UI가 깨졌다.
버튼들이 클릭이 안되고, 가운데로 몰리고, 보이지 않는 경우도 있었다.
가운데로 검색바는 찌그러졌었다.
iOS16 에서 UIKit 이 변경된게 무엇인지 발표하는 WWDC 도 살펴보았고,
iOS16, navigation Bar 기타 등등.. 여러 구글링을 해도 답이 보이지 않았다. ( 이런거나 계속 나오고 -ㅅ- )
삽질 끝에 발견한 현상
iOS16 이전에는,
- titleView 의 부모가 _UINavigationBarContentView 였다.
- _UINavigationBarContentView 는 titleView 와 상관없이, 네비게이션바 전체를 덮고 있다.
- titleView 는 _UINavigationBarContentView 의 center에 배치되었다.
iOS16 에서는,
- titleView와 _UINavigationBarContentView 사이에 _UINavigationBarTitleControl 이 추가되었다.
( titleView 의 부모가 _UINavigationBarTitleControl 로 바뀜 ) - _UINavigationBarTitleControl 는 titleView 에게 달라붙는 constraints를 가지고 있다.
( 기존에 titleView 의 부모는 네비게이션바 전체를 알아서 덮었지만, _UINavigationBarTitleControl 는 오히려 titleView 의 constraints 에 의존함 ) - titleView가 아닌, _UINavigationBarTitleControl 가 _UINavigationBarContentView의 center에 배치된다.
Solution
즉, iOS16 이전에는.
titleView 를 부모에게 달라붙게만 constraints 를 설정하며, UI를 그릴 수 있었다.
하지만 iOS16 에서는,
titleView 의 부모의 width, height 가 titleView 의 크기에 의해 결정되기 때문에,
부모에게 달라붙게만 constraints 를 넣고, width, height가 Ambiguous하면,
titleView 의 부모 (_UINavigationBarTitleControl) 는 width, heigth가 0이 된다. ( 안보인다 )
그래서 intrinsic size 를 가진 커스텀뷰들은 보이긴 하는데 가운데로 찌그러졌던 것이고,
intrinsic size 가 없는 뷰들은 width height 가 0으로 되어 아에 안보이게 된 것이다.
iOS16 부터는 네비게이션바에 넣어주던 커스텀뷰의 width, height를 Ambiguous하지 않게 해야한다.
'iOS, Swift > Tip, Bug, Swift Error' 카테고리의 다른 글
iOS ) Archive 후 Appstore Uplaod 시 에러 - EEYatHo iOS (0) | 2022.10.04 |
---|---|
Swift ) iOS16 강제 화면 회전 대응 - EEYatHo iOS (0) | 2022.10.04 |
iOS ) 이미지는 알파 채널 또는 투명도를 포함할 수 없습니다. - EEYatHo iOS (0) | 2022.05.31 |
Swift ) disable tintColor - EEYatHo iOS (0) | 2022.05.01 |
Swift ) static image LaunchScreen 설정 삭제하기 - EEYatHo iOS (0) | 2022.01.18 |
Comments