問題探究.
造成這個(gè)原因是什么吶?
答: 兩個(gè)因素.
scrollEdgeAppearance 屬性
iOS15 強(qiáng)制適用于所有導(dǎo)航器
當(dāng)導(dǎo)航控制器包含導(dǎo)航欄和滾動(dòng)視圖時(shí),滾動(dòng)視圖的部分內(nèi)容將顯示在導(dǎo)航欄下方。如果滾動(dòng)內(nèi)容的邊緣到達(dá)該欄,UIKit將在此屬性中應(yīng)用外觀設(shè)置。如果此屬性的值為nil,UIKit將使用standardAppearance屬性中的設(shè)置,并修改為使用透明背景。如果沒有導(dǎo)航控制器管理您的導(dǎo)航欄,UIKit將忽略此屬性,并使用導(dǎo)航欄的標(biāo)準(zhǔn)外觀。在使用iOS 14或更低版本的應(yīng)用程序上運(yùn)行時(shí),此屬性適用于標(biāo)題較大的導(dǎo)航欄。在iOS 15中,此屬性適用于所有導(dǎo)航欄。
如何解決.
@NSCopying var scrollEdgeAppearance: UINavigationBarAppearance? { get set }
我們只需要按照UIKit 的最新改動(dòng)進(jìn)行適配就好.如下:
Swift:
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor =
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance
OC:
//ios15新特性默認(rèn)將導(dǎo)航條變透明,以下代碼是ios15新特性,將它變回不透明
? ? if(@available(iOS15.0, *)) {
? ? ? ? UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
? ? ? ? [appearanceconfigureWithOpaqueBackground];
? ? ? ? appearance.backgroundColor= [UIColorwhiteColor];
//去掉導(dǎo)航欄下的陰影線
? ? ? ? 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;
? ? }