LetsSwifty/Swift_Expert

[Swift] : iOS 13-> 15 변경점 정리 (CH03-TabBar)

Closed this issue · 2 comments

챕터3의 340페이지부터 설명하는 외형 프록시 객체는 iOS 13 기준으로 되어있어, 같은 부분을 iOS 15 버전으로 적용했습니다.

WWDC 2021에서 발표된 내용

While UIKit does its best to make this new appearance seamless in your app, there are a few issues you may encounter. You should audit your code for places where you may be setting a bar’s translucent property to false and check for any UIViewControllers that have non-standard edgesForExtendedLayout. Both of these conditions will cause visual issues with the new appearance. (대충 UIKit의 기능 확장으로 인해 사양이 바뀌어 기존 방법을 사용할 수 없다는 뜻이래요.)

기존에 시도했던 내용

let tbC = UITabBarController()

// 흰 배경만 나옴
tbC.tabBar.backgroundImage = UIImage(named: "menubar-bg-mini")

// 검은 배경만 나옴
tbC.tabBar.isTranslucent = false
tbC.tabBar.backgroundImage = UIImage(named: "menubar-bg-mini")

iOS 15 이후 변경점

if #available(iOS 15.0, *) {
    let tbC = UITabBarController()
    // UITabBarAppearance
    let tbProxy = UITabBarAppearance()
    
    // 배경 정상 적용을 위한 메소드
    tbProxy.configureWithOpaqueBackground()
    // 배경 적용
    tbProxy.backgroundImage = UIImage(named: "menubar-bg-mini")
    
    // TabBarItem의 속성 설정을 위한 Appearance
    let tbItemProxy = tbProxy.stackedLayoutAppearance
    
    // normal 상태의 titleTextAttributes
    tbItemProxy.normal.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 15)]
    // selected 상태의 iconColor(tintColor와 동일하다고 보시면 될 것 같아요)
    tbItemProxy.selected.iconColor = .white
    // selected 상태의 titleTextAttributes
    tbItemProxy.selected.titleTextAttributes = [.foregroundColor: UIColor.red]
    // disabled 상태의 titleTextAttributes
    tbItemProxy.disabled.titleTextAttributes = [.foregroundColor: UIColor.gray]

    // Appearance 적용하기
    // standard -> 스크롤 도중, scrollEdge -> 스크롤 안할 때
    tbC.tabBar.standardAppearance = tbProxy
    tbC.tabBar.scrollEdgeAppearance = tbC.tabBar.standardAppearance
} else {
    // 책의 내용
}
  • 스크린샷
    스크린샷 2022-08-21 11 30 32

LGTM👍

저같은 경우는 책과 조금 다르게 했지만
요렇게 하니까 문제없이 외장 프록시 사용되더라구여