UIBarAppearance是iOS13苹果新出来的一个对相应的空间统一设置外观样式的API,可以统一配置NavigationBar 、TabBar、 Toolbar等的外观样式。
UIBarAppearance的子类
UINavigationBarAppearance 设置导航栏外观样式
UITabBarAppearance 设置Tabbar外观样式
UIToolbarAppearance 设置Toolbar外观样式
这里用导航条的UINavigationBarAppearance作为示例,TabBar和Toolbar的设置外观样式使用的方式与其相同
1.UINavigationBar默认外观样式
iOS15以前默认是半透明毛玻璃
iOS15以后默认是透明,在滑动时如果系统检测到导航栏下方有其他UI的话,导航栏会变成半透明毛玻璃,想要默认半透明毛玻璃,设置standardAppearance和scrollEdgeAppearance,单独设置standardAppearance也不行
let navBarAppearance = UINavigationBarAppearance()
navigationBar.scrollEdgeAppearance = navBarAppearance
navigationBar.standardAppearance= navBarAppearance
2.UINavigationBar相关属性说明
barTintColor 导航栏背景颜色
iOS15以前设置有效果
iOS15以后无效果需要设置UINavigationBarAppearance的backgroundColor
tintColor 导航栏文字 颜色
isTranslucent 半透明
默认为YES,当设为YES,iOS15以前先取barTintColor的颜色,当barTintColor为nil默认半透明毛玻璃,iOS15先取UINavigationBarAppearance的backgroundColor颜色,当UINavigationBarAppearance的backgroundColor为nil,UINavigationBarAppearance的backgroundEffect默认半透明毛玻璃,当UINavigationBarAppearance的backgroundEffect为nil背景为透明
当设为NO,iOS15以前先取barTintColor的颜色,当barTintColor为nil默认白色,iOS15先取UINavigationBarAppearance的backgroundColor颜色,当UINavigationBarAppearance的backgroundColor为nil,UINavigationBarAppearance的backgroundEffect默认背景为灰色,当UINavigationBarAppearance的backgroundEffect为nil背景为黑色
shadowImage 下划线
iOS13以前设置有效果,不过需要同时设置backgroundImage,会影响导航栏背景,不建议
iOS13以后无效果需要设置UINavigationBarAppearance的shadowColor和shadowImage
scrollEdgeAppearance iOS15
当可滚动内容的边缘与导航栏的边缘对齐时,导航栏的外观设置。如果这个属性的值为nil, UIKit使用导航栏的standardAppearance外观属性的值,修改为有一个透明的背景
standardAppearance iOS13
设置导航栏标准高度的样式设置,默认样式。此属性的默认值是一个包含系统默认外观设置的外观对象
3.UINavigationBarAppearance相关属性说明
backgroundEffect
半透明效果,基于backgroundColor或backgroundImage的磨砂效果
backgroundColor
背景色
backgroundImage
背景图片
backgroundImageContentMode
渲染backgroundImage时使用的内容模式。 默认为UIViewContentModeScaleToFill。
shadowColor
阴影颜色(底部分割线),当shadowImage为nil时,直接使用此颜色为阴影色。如果此属性为nil或clearColor(需要显式设置),则不显示阴影
shadowImage
阴影图片