一. tabbar背景颜色/字体颜色
-
改变tabbar的
选中
的item的字体
颜色,和未选中
的item的字体
颜色:self.tabbar.tintColor = [UIColor redColor];
self.tabbar.unselectedItemTintColor = [UIColor yellowColor];
-
改变tabbar的
背景
颜色,方法1:self.tabBar.barTintColor = .blue self.tabBar.backgroundColor = .blue
-
改变tabbar的
背景
颜色,方法2:self.tabBar.backgroundImage = UIImage.withColor(.red) self.tabBar.backgroundColor = .blue
-
改变tabbar的
背景
颜色,方法3:if #available(iOS 13, *) { let appearance = self.tabBar.standardAppearance.copy() //appearance.shadowImage = UIImage.withColor(.yellow)///设置阴影 //appearance.shadowColor = .yellow///设置阴影 appearance.backgroundImage = UIImage.withColor(.yellow) appearance.backgroundColor = .yellow appearance.backgroundEffect = nil////这句话非常重要,在不动.translucent属性前提下,设置纯背景颜色,特别是设置tabbar透明,非常重要 self.tabBar.standardAppearance = appearance if #available(iOS 15.0, *) { ///用这个方法的,这个一定要加,否则15.0系统下会出问题,一滑动tabbar就变透明!!! self.tabBar.scrollEdgeAppearance = appearance } else { } }
-
总结:
-
方法1
或者方法2
中的属性设置,一定要成对出现!!!如果只设置backgroundImage/barTintColor
或者只设置backgroundColor
,一滑动tabor
就会变透明 - 使用
方法3
:- 如果不适配ios 15.0,也就是不加上
self.tabBar.scrollEdgeAppearance = appearance
,也会出现一滑动控制器,tabbar
变透明 - 如果是
tabbar
背景透明
,方法3
一定要加上appearance.backgroundEffect = nil
。加上这句,就取消tabbar的毛玻璃
效果了。
- 如果不适配ios 15.0,也就是不加上
-
-
不得不骂一句,操蛋的苹果,改个背景颜色,要几个属性组合使用,不同的组合适配不同的系统版本,一个不小心就是掉坑里了!!!
二. navigationBar背景颜色/字体颜色
- 改
navigationBar
的字体颜色:let appearance = UINavigationBarAppearance() appearance.backgroundColor = bgcolor appearance.shadowColor = .clear///下划线颜色 appearance.backgroundEffect = nil////如果要设置背景透明,这句话非常重要 appearance.titleTextAttributes = [.foregroundColor:titleColor,.font:UIFont.systemFont(ofSize: 18)] self.navigationController?.navigationBar.standardAppearance = appearance self.navigationController?.navigationBar.scrollEdgeAppearance = appearance
- 关于
tabbar
和navigationBar
的scrollEdgeAppearance
的区别:-
- 两个
appearance
都继承同一个类UIBarAppearance
。而UIBarAppearance
四个决定背景颜色的属性和阴影的属性就是:
/// A color to use for the bar background. This color is composited over backgroundEffects. @NSCopying open var backgroundColor: UIColor? /// An image to use for the bar background. This image is composited over the backgroundColor, and resized per the backgroundImageContentMode. open var backgroundImage: UIImage? /// The content mode to use when rendering the backgroundImage. Defaults to UIViewContentModeScaleToFill. UIViewContentModeRedraw will be reinterpreted as UIViewContentModeScaleToFill. open var backgroundImageContentMode: UIView.ContentMode /// A color to use for the shadow. Its specific behavior depends on the value of shadowImage. If shadowImage is nil, then the shadowColor is used to color the bar's default shadow; a nil or clearColor shadowColor will result in no shadow. If shadowImage is a template image, then the shadowColor is used to tint the image; a nil or clearColor shadowColor will also result in no shadow. If the shadowImage is not a template image, then it will be rendered regardless of the value of shadowColor. @NSCopying open var shadowColor: UIColor? /// Use an image for the shadow. See shadowColor for how they interact. open var shadowImage: UIImage?
- 两个
-
-
tabar
的scrollEdgeAppearance
是15.0后有的
而navigationBar
的scrollEdgeAppearance
是13.0后有的:
/// Describes the appearance attributes for the tabBar to use when an observable scroll view is scrolled to the bottom. If not set, standardAppearance will be used instead. @available(iOS 15.0, *) @NSCopying open var scrollEdgeAppearance: UITabBarAppearance? @available(iOS 13.0, *) @NSCopying open var scrollEdgeAppearance: UINavigationBarAppearance?
-
- 如果
采用
赋值standardAppearance
改变背景颜色,无论tabbar
和还是navigationBar
都要设置scrollEdgeAppearance
,否则就会出现滑动变透明的问题。
- 如果
- 4 如果要设置
tabbar
和navigationBar
的背景透明
,不要去搞什么.translucent
=true
/false
,这个属性一动就影响左上角y值的起点位置,影响全局布局。设置appearance.backgroundEffect = nil
就可以了。
-
三。.translucent 属性
干了什么
- 是
YES
的时候,tabbar
的视图层级是
UITabBar
-->UIBarBackground
-->UIVisualEffectView
-->UIVisualEffectBackdropView
-->UIVisualEffectSubview
-->UIVisualEffectSubview (决定tabbar颜色的视图)
- 是
NO
的时候,tabbar
的视图层级是
UITabBar
-->UIBarBackground
-->UIImageView (决定tabbar颜色的视图)
-
YES
还是NO
,从颜色效果上,我没看出区别 - translucent = NO 对UICollectionView截屏的影响,具体见第十一条
- 使用
方法1
和方法2
的时候,视图层级
和self.tabbar.translucent = NO
一摸一样,都是3层 - 改变
tabbar
的背景颜色,又看到下面这个方法
这个方法只是改变tabbar部分的背景颜色,tabbar到底部的安全区UIView *color_view = [[UIView alloc]initWithFrame:self.tabBar.bounds]; color_view.backgroundColor = [UIColor redColor]; [self.tabBar insertSubview:color_view atIndex:0];
safeArea
有一条是改变不了的。比如使用上面的方法设置tabbar
为redcolor
,tabbar下面的安全区有一条留白。