iOS 15的系統導航欄背景默認靜止時隱藏,得頁面能滑動且有內容經過導航欄區域才會顯示...
解決方法
iOS 15后,需要手動設置UINavigationBar
的scrollEdgeAppearance
和standardAppearance
屬性才行。
// OC
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (@available(iOS 15.0, *)) { UINavigationBar *navigationBar = [UINavigationBar appearance]; UINavigationBarAppearance *scrollEdgeAppearance = [[UINavigationBarAppearance alloc] init]; scrollEdgeAppearance.backgroundColor = UIColor.redColor; navigationBar.scrollEdgeAppearance = scrollEdgeAppearance; UINavigationBarAppearance *standardAppearance = [[UINavigationBarAppearance alloc] init]; standardAppearance.backgroundColor = UIColor.greenColor; navigationBar.standardAppearance = standardAppearance; } return YES; }
// Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 15.0, *) { let navigationBar = UINavigationBar.appearance() navigationBar.scrollEdgeAppearance = { let appearance = UINavigationBarAppearance() appearance.backgroundColor = .red return appearance }() navigationBar.standardAppearance = { let appearance = UINavigationBarAppearance() appearance.backgroundColor = .green return appearance }() } return true }
從效果上看的出:
- scrollEdgeAppearance:是處於頂部時的背景
- standardAppearance:是滑動后的背景
更多的自定義效果都可以在對應的UINavigationBarAppearance
實例里面設置其屬性。
如果想統一樣式,scrollEdgeAppearance
和standardAppearance
都設置同一個appearance
即可(不設置任何屬性則是默認的毛玻璃效果):
// OC
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (@available(iOS 15.0, *)) { UINavigationBar *navigationBar = [UINavigationBar appearance]; UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init]; navigationBar.scrollEdgeAppearance = appearance; navigationBar.standardAppearance = appearance; } return YES; }
// Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 15.0, *) { let navigationBar = UINavigationBar.appearance() let appearance = UINavigationBarAppearance() navigationBar.scrollEdgeAppearance = appearance navigationBar.standardAppearance = appearance } return true }