问题探究.
造成这个原因是什么呐?
答: 两个因素.
scrollEdgeAppearance 属性
iOS15 强制适用于所有导航器
当导航控制器包含导航栏和滚动视图时,滚动视图的部分内容将显示在导航栏下方。如果滚动内容的边缘到达该栏,UIKit将在此属性中应用外观设置。如果此属性的值为nil,UIKit将使用standardAppearance属性中的设置,并修改为使用透明背景。如果没有导航控制器管理您的导航栏,UIKit将忽略此属性,并使用导航栏的标准外观。在使用iOS 14或更低版本的应用程序上运行时,此属性适用于标题较大的导航栏。在iOS 15中,此属性适用于所有导航栏。
如何解决.
@NSCopying var scrollEdgeAppearance: UINavigationBarAppearance? { get set }
我们只需要按照UIKit 的最新改动进行适配就好.如下:
Swift:
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor =
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance
OC:
//ios15新特性默认将导航条变透明,以下代码是ios15新特性,将它变回不透明
if(@available(iOS15.0, *)) {
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
[appearanceconfigureWithOpaqueBackground];
appearance.backgroundColor= [UIColorwhiteColor];
//去掉导航栏下的阴影线
appearance.shadowColor= [UIColorclearColor];
self.navigationBar.standardAppearance = appearance;
self.navigationBar.scrollEdgeAppearance=self.navigationBar.standardAppearance;
}
tabbar:
if(@available(iOS15.0, *)) {
UITabBarAppearance *appearance = [UITabBarAppearance new];
[appearanceconfigureWithOpaqueBackground];
appearance.backgroundColor= [UIColorwhiteColor];
self.tabBar.standardAppearance= appearance;
self.tabBar.scrollEdgeAppearance = self.tabBar.standardAppearance;
}