iOS11自定义导航栏问题解决

在很多项目中,为了解决iOS项目中导航栏的push、pop中存在的问题,很多时候开发者们都隐藏了导航控制器的navigationBar,为每一个视图控制器(viewController)都创建一个View(navigationBar)。

iOS11自定义导航栏问题解决_第1张图片

iOS11之前常常是这样来设置导航栏的,但在iOS11上运行就成了这样:

iOS11自定义导航栏问题解决_第2张图片

想一想,iOS11引入了safeArea的一个概念:

iOS11自定义导航栏问题解决_第3张图片

运行效果如下:


iOS11自定义导航栏问题解决_第4张图片

看着高度是44.

iOS11自定义导航栏问题解决_第5张图片

发现navigationBar的高度为64,但是却不是预想的。很多开发者通过在layoutSubviews时去修改子视图的frame。实际上并不需要,我的做法是:

iOS11自定义导航栏问题解决_第6张图片

iOS11不需要去设置导航栏的高度,导航栏会自动顶开。


iOS11自定义导航栏问题解决_第7张图片

实现UIBarPositioning协议的barPosition方法,返回UIBarPositionTopAttached,解释为:The bar is at the top of the screen (as well as its local context), and its background extends upward—currently only enough for the status bar.

再运行效果如下:

iOS11自定义导航栏问题解决_第8张图片

旋转屏幕的效果跟navigationController的navigationBar效果都一样:

iOS11自定义导航栏问题解决_第9张图片

本文只提供实现思路,具体实现自己组织。

你可能感兴趣的:(iOS11自定义导航栏问题解决)