iOS11 UINavigationBar 适配

今年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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍iOS11中在UI方面做了哪...
    阿凡提说AI阅读 3,698评论 0 1
  • 一、NavigationBar UIBarItem UIBarItem在iOS11在中新增landscapeIma...
    灰s阅读 9,234评论 5 11
  • 1. They were by no means the only ones making their way t...
    Bebevino阅读 1,450评论 0 0
  • 胸口堵住了,好难受,这是怎么了?她出去了,叫我们帮忙看一下,两个人答应的,她刚出去一会儿,另一个人就走了,我要在那...
    周海双阅读 1,382评论 0 0
  • 近来坚持每天写千字文,感觉获益良多,每天都充满干劲,总想象不久的明年,自己或许也可以出书了。得意之下,多次寻思增加...
    一默如雷阅读 1,414评论 1 3

友情链接更多精彩内容