• Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 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
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

우리 NavigationBar가 달라졌어요 (Xcode 13 update)

Xcode 13 업데이트 이후 잘 돌아가던
UINavigationController, UINavigationBar, UITabbar가 다같이 난리가 났다.

image

흐릿..한 백버튼이 보이시나요…
원래 뒤의 하얀색 뷰컨이 잘 extened 된 상태였는데,
엑코 업데이트 이후에 갑자기 저렇게 난리가 났다.

image

이 상태라서

self.edgesForExtendedLayout = UIRectEdge.all

이것도 시도해 봤는 데 안 먹고…

imageimage

탭바도… 원래 저렇게 배경, 선이 있어야 하는데 갑자기 사라지고 투명 탭바가 됐다 ;
whyrano… whyrano…

왜 이러는걸까?

결론부터 말하자면, iOS13 업데이트 때, 애플이 UINavigationBarAppearance라는 UIKit API를 공개했었다.
하지만.. UINavigationBarAppearance를 쓰지 않아도 지금까지는 잘 돌아가니
UINavigationBarAppearance로 바꿀 필요성을 못 느꼈었는데,, 이제는 써야 한다.

iOS15가 되면서 변경사항이 생겼다고 한다. Xcode 13이 iOS 15 SDK를 포함하기 때문에 위와 같은 현상이 생긴 것!
근데,, 난 다 됐고,, 그 전(iOS14) 처럼 보였으면 좋겠는데… -> 그럼 Appearance를 커스텀 해야 한다.

탭바는, 위 두 사진에서 오른쪽같이 생긴 게… iOS 15의 디자인이었다 (ㅋㅋㅋ)

image

iOS15의 변경사항을 살펴보려고 WWDC 21: What’s new in UIKit 라는 WWDC 21 영상을 봤는데,
에러가 아니고 ㅋㅋ 변경사항이였다. 저게 그냥 최신 디자인인 것… WWDC 챙겨볼 걸.. ( ◠‿◠ )
스크롤 시 background가 사라지게끔 변경되었는데, 이는 내용을 더 명확하게 보여주기 위함이라고 한다.

WWDC 영상을 더 살펴보면,

image

앞에서 공개한 새로운 모양을 적용하는 과정에서, 몇가지 문제가 발생할 수 있다고 한다. 맞다.. 바로 나한테 발생한 그 문제들 …. ㅋㅋ WWDC 진작 볼 걸!!!!!!!

bar의 isTranslucent, 반투명 속성을 false로 설정 해 둔 곳을 다시 체크해봐야 하고,
default가 아닌 edgesForExtendedLayout을 적용한 UIViewController도 체크해봐야 한다.
이 두가지 조건에서 visual적인 문제가 발생한다!!

image

image

그래서 어떻게 해결하는데?

image

답은 커스텀. 이젠 정말 .. Appearance들을 쓸 때가 온 것이다…
custom appearance를 만들고, 그걸 bar의 scrollEdgeAppearance 프로퍼티에 할당해주면 된다.
scrollEdgeAppearance 이 프로퍼티는 원래 UINavigationBar에만 사용 가능 했었는데,
이제는 UIToolbar, UITabbar에도 사용가능하다.

이렇게 custom appearance를 설정하면,
위에서 본 호환되지 않는 API들 때문에 발생하는 visual적인 이슈들은 다~ 바이바이 할 수 있다..!!!!

UIBarAppearance를 좀 더 살펴보고,
UINavigationController+Extension.swift 를 갈아엎는 건 다음 포스팅에 ~~