美文网首页iOS开发-技术分享程序员
iOS 设置大标题导航栏 prefersLargeTitles

iOS 设置大标题导航栏 prefersLargeTitles

作者: Beoyan | 来源:发表于2019-03-20 16:45 被阅读4次

    从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);
    

    有这三种类型只有当设置prefersLargeTitlestrue是设置的展示方式属性才会生效,当使用大标题的时候大多数使用的都是UINavigationItemLargeTitleDisplayModeAutomatic


    说了这么多现在开始列举遇到的问题

    1. 之前好用的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];
    

    目前项目整体修改这种大标题的风格后续问题会相应更新也欢迎评论谈论

    相关文章

      网友评论

        本文标题:iOS 设置大标题导航栏 prefersLargeTitles

        本文链接:https://www.haomeiwen.com/subject/mdxtvqtx.html