Appearance の設定方法

iOS 13 から Appearance の設定方法が追加されていた。
以前の方法もまだ非推奨になっておらず引き続き利用できるみたいだけど、 Legacy Customizations と表記されていて新しい設定方法が推奨されている。

新しい設定方法は standardAppearance プロパティによるもので、 UITabBar の場合は以下のようなコードになる。

let tabBarController = UITabBarController()
let tintColor: UIColor = .green
        
if #available(iOS 13.0, *) {
    let tabBarItemAppearance = UITabBarItemAppearance()
    tabBarItemAppearance.selected.iconColor = tintColor
    tabBarItemAppearance.selected.titleTextAttributes = [.foregroundColor: tintColor]
    
    let tabBarAppearance = UITabBarAppearance()
    tabBarAppearance.inlineLayoutAppearance = tabBarItemAppearance
    tabBarAppearance.stackedLayoutAppearance = tabBarItemAppearance
    tabBarAppearance.compactInlineLayoutAppearance = tabBarItemAppearance
            
    tabBarController.tabBar.standardAppearance = tabBarAppearance
} else {
    UITabBar.appearance().tintColor = tintColor
    UITabBarItem.appearance().setTitleTextAttributes(
        [.foregroundColor: tintColor],
        for: .selected
    )
}
  • inlineLayoutAppearance
  • stackedLayoutAppearance
  • compactInlineLayoutAppearance

は、端末のスクリーンサイズや portrait/landscape によっていずれかが適用されるみたいなので、例えば portrait の iPhone のみの対応とかであれば3つ全てにセットする必要はなさそうかも。