iOS 設定大標題導航欄 prefersLargeTitles = YES 出現的各種問題
從iOS11 開始系統風格變成了“賊大”的導航欄標題樣式就不展示了 系統app裡都有 設定方式可以分為全域性設定或者單個頁面設定
1.全域性設定
[[UINavigationBar appearance] setPrefersLargeTitles:YES];
2.單個頁面設定(在viewWillAppear中設定)
if (@available(iOS 11.0, *)) { self.navigationController.navigationBar.prefersLargeTitles = YES; self.navigationController.navigationItem.largeTitleDisplayMode =UINavigationItemLargeTitleDisplayModeAutomatic; } else { // Fallback on earlier versions }
largeTitleDisplayMode
typedef NS_ENUM(NSInteger, UINavigationItemLargeTitleDisplayMode) { /// 自動顯示大標題或小標題(初始時是大標題,當滑動使大標題隱藏時顯示小標題) UINavigationItemLargeTitleDisplayModeAutomatic, /// 總是顯示大標題 UINavigationItemLargeTitleDisplayModeAlways, /// 是總是顯示小標題 UINavigationItemLargeTitleDisplayModeNever, } NS_SWIFT_NAME(UINavigationItem.LargeTitleDisplayMode);
有這三種類型只有當設定prefersLargeTitles
為true
是設定的展示方式屬性才會生效,當使用大標題的時候大多數使用的都是UINavigationItemLargeTitleDisplayModeAutomatic
說了這麼多現在開始列舉遇到的問題
-
之前好用的
present
出來的帶著導航欄的控制器當dismiss
後程序莫名其妙的崩潰這個目前出現這種情況的原因展示不明確,解決方案如果你前一個頁面使用了大標題
present
的頁面還需要帶著導航欄只需要在present
時候加下面兩行程式碼
//這裡的vc是需要模態出來的控制器 UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc]; if (@available(iOS 11.0, *)) { nav.navigationBar.prefersLargeTitles = NO; nav.navigationItem.largeTitleDisplayMode =UINavigationItemLargeTitleDisplayModeNever; } else { // Fallback on earlier versions } [self presentViewController:nav animated:NO completion:nil];