博客> iOS 11 导航LargeTitleView
iOS 11 导航LargeTitleView
2019-12-11 22:52 评论:0 阅读:2118 liyangshuai
ios 适配 11

今年的iOS 11在导航方面做出了很多改动,如下:

iOS 11中导航多了一个LargeTitleView,细心的朋友,通过一些系统应用就可以看出来

系统设置 实现方法:  17FA05FD-9399-468C-B474-A1F2F8B5EA55.png

主要实现方法:

self.navigationController.navigationBar.prefersLargeTitles = YES;

 909AF787-8606-4298-BC42-28EDF4F284E5.png

因为

 A48C7B58-2C99-45AD-A0C5-897C2D0A2FA0.png  580FCD05-1FA7-4769-B660-2ABDA6B1BA66.png

大家可以看到:

当你prefersLargeTitles属性设置为YES的时候,相当于在UINavigationBar里面添加了一个UINavigationBarLargeTitleView

也就是这个原因,导致了iOS 11系统下,如果你设置prefersLargeTitles属性,则意味这导航从原来的44变成了44+UINavigationBarLargeTitleView的高度,然而UINavigationBarLargeTitleView的高度又是根据LargeTitle的字体大小来决定的

那到底应该是多少呢?

 173AA456-B942-41D6-BEE6-88D576FDBFFA.png

具体多少,那要看你是否设置这个LargeTitle的字体,默认情况下,UINavigationBarLargeTitleView的高度是52,也就是你没有在largeTitleTextAttributes这个属性里面设置字体的大小

当然,其他的字体样式你还是可以设置的, 比如上面的我更改了字体的颜色

那么最终结论:

iOS 11导航高度 = 状态栏高度(20) + 导航栏高度(44) + 是否设置prefersLargeTitles ? (52或者其他) : 0

prefersLargeTitles不设置的情况下,顶部导航的高度是64,和之前版本一样 prefersLargeTitles设置的情况下,顶部导航的高度是116,和之前版本相比,多了一个UINavigationBarLargeTitleView的高度

实现和系统设置里面的效果,UINavigationBarLargeTitleView跟随着tableView的上下滚动,实现和顶部title的切换

其实这个很简单,这个是系统自己完成的,只要这个页面是用tableView的做的,那么这个效果就自己已经实现了,前提是你开启了prefersLargeTitles

最终效果

然而iPhone X,一个奇葩的机型  BCFE449D-5EA7-45E5-8059-67094AA10DFD.png

由于iPhone X天生自带的刘海,导致开发者不得不去重新适配他

iPhone X导航高度 = 状态栏高度(20) + 刘海高度(24) + 导航栏高度(44) + 是否设置prefersLargeTitles ? (52或者其他) : 0

prefersLargeTitles不设置的情况下,顶部导航的高度是88 prefersLargeTitles设置的情况下,顶部导航的高度是140

还有一点要说明下:

如果我添加左右UIBarButtonItem

 Simulator Screen Shot - iPhone 8 - 2017-10-25 at 09.22.43.png document结构图:

 5000EEE3-7547-4DD5-8EC3-D652EA96A474.png

 4D96E334-09A3-4FD0-A299-D94D9DA13E55.png

展开后示意图:

收藏
3
sina weixin mail 回到顶部