部分总结;
(一)导航栏高度的变化
(1) iOS11之前导航栏默认高度为44pt(这里高度指NavigationBar);
(2) iOS11之后如果设置了大标题样式, 则为96pt,默认情况下还是44pt;
(3) 但在iPhoneX上statusBar由20pt变成了44pt,所以iPhoneX上高度(statusBar + NavigationBar)变为88pt,如果项目里隐藏了导航栏加了自定义按钮之类的,这里需要注意适配一下。
if (@available(iOS 11.0, *)) {
//iOS11之后
//导航大标题, 上滑到顶部时动态切换大小标题样式 (导航栏高度UINavigationBar = 44/96)
self.navigationController.navigationBar.prefersLargeTitles = YES;
//自动模式,依赖于上一个item的设置; 上一个item设置为自动并且当前导航栏prefersLargeTitles=YES,则显示大标题样式;
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
// //prefersLargeTitles=YES,滚动到顶部时,当前总是显示大标题样式
// self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;
// //prefersLargeTitles=YES,滚动到顶部时,当前也总不会显示大标题样式
// self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
//标题样式变化时, btn的frame不变
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStylePlain target:self action:@selector(testDidClick)];
self.navigationItem.rightBarButtonItem = item;
//标题样式变化时, btn的frame不变
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(testDidClick)];
self.navigationItem.leftBarButtonItem = item1;
//titleView
} else {
// Fallback on earlier versions
//titleView
}
(二) 导航栏图层及对titleView布局的影响
iOS11之后titleView层级发生了变化, 具体如图展示: