iOS11 UINavigationBar 适配

作者: ColaBean | 来源:发表于2017-07-04 15:30 被阅读5458次

今年6月份的WWDC大会已经过去,在此会上有众多的新特性。这里强调说一下UINavigationBar

UINavigationBar相关

先说下效果,在用到下面两个属性时,导航条不再是64的高度,导航标题也会变大,文字靠左对齐,当上下滑动页面时,导航条的高度会进行拉伸,文字也会缩放。

00.gif
  • prefersLargeTitles
  • largeTitleDisplayMode

用法:

self.navigationController.navigationBar.prefersLargeTitles = YES;
self.navigationItem.title = @"xxxx";
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;

自定义UINavigationBar

相较于iOS11之前的版本,UINavigationBar结构上也与之前不同。如图:

图一 iOS11 later
图二 iOS11 before

不难看出,原来的UINavigationItemView被替换为_UINavigationBarContentView

如果直接初始化UINavigationBar并添加在当前ViewController上时就会出现图三所示的情况,即:子控件的高度只有44。为了解决此问题,可以先继承UINavigationBar,然后再遍历UINavigationBar的子控件并修改Frame:

图三
- (void)layoutSubviews {
    [super layoutSubviews];
#if TARGET_OS_IOS
    for (UIView *aView in self.subviews) {
        if ([@[@"_UINavigationBarBackground", @"_UIBarBackground"] containsObject:NSStringFromClass([aView class])]) {
            aView.frame = CGRectMake(0, -CGRectGetMinY(self.frame), CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)+CGRectGetMinY(self.frame));
        }
    }
#endif
    
}

效果和iOS11之前一样,当然这不是最优方案,过于简单粗暴了点。


图四

开发环境

  • Xcode_9_beta_2

Demo

相关文章

网友评论

  • 越天高:你这个iphoneX上面怎么适配的 谢谢 我运行了一下好像缺一段啊
  • zdl:我是把它直接定义成baseVIewController的属性了,这样的话 跳转页面会有点问题
  • Scott_Mr:这样子是有问题的,滑动返回的时候,左边的item位置又往下移了。
    林大鹏:https://stackoverflow.com/questions/45711765/how-to-correctly-set-uinavigationbar-height-in-ios-11,这个可以!
  • iOS白水:自定义返回按钮 leftbaritem 偏右边。怎么解决呢。
    ColaBean:@超S神 我在Demo中试着给导航条添加了左Item,可以参考下
    iOS白水:@ColaBean 这样不行的。 整个系统导航结构发生变化了。 还有 titleview 与 leftbutton的间距。
    ColaBean:不清楚你的问题是基于iOS11的情况还是其他情况。给你说下我的思路(现在外面出差,电脑不在旁边不方便调:sweat_smile: ): 1、直接替换系统返回的图片 『setBackIndicatorImage』2、自定义button 调整image的edge。
  • 熟能生巧HN:真机上子控件的高度是正常的:flushed:
    ColaBean:@乔_bfe9 额 可能是两个版本的SDK不同吧 不过好奇你是怎么在Xcode8上跑起iOS11的
    熟能生巧HN:@ColaBean 最新发现,用xcode9编译应用在真机上调试,子控件高度不正常,但是在真机iOS11系统下跑xcode8编译的应用子控件高度正常。
    ColaBean:感谢指出:pray: 我手机没装iOS 11beta 只是在模拟器上调试了下
  • Bo_Basara:马克 以后学习

本文标题:iOS11 UINavigationBar 适配

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