就在今年九月,苹果新品发布会推出新产品和iOS11,如今已经进入iOS11时代.
在ios11时 ,由于新款的iPhone x 的横空出世,给我们的适配和开发带来新的挑战和问题.没办法,苹果爸爸每一次大的改进,都会搞出一些事情的,我们只能淡定的去适应苹果的新功能.
1 导航栏尺寸变化了先看图
因为刘海的存在iphoneX 的导航栏高度要高出一些
但是ios11 时 在在UINavigationBar中新增了一个BOOL属性prefersLargeTitles, 将该属性设置为ture,navigation bar就会在整个APP中显示大标题
上代码
pragma mark 导航栏
//大标题
-(void)makeTopTitleView
{
self.navigationItem.title=@"ios11Test";
//不加上这一句颜色会不对
self.navigationController.navigationBar.translucent = NO;
//背景色注意
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
//设置字体
self.navigationController.navigationBar.titleTextAttributes=
@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:17]};
/*
在UINavigationBar中新增了一个BOOL属性prefersLargeTitles,将该属性设置为ture,navigation bar就会在整个APP中显示大标题,如果想要在控制不同页面大标题的显示,可以通过设置当前页面的navigationItem的largeTitleDisplayMode属性
*/
self.navigationController.navigationBar.prefersLargeTitles=YES;
/* navigationItem.largeTitleDisplayMode
typedef NS_ENUM(NSInteger, UINavigationItemLargeTitleDisplayMode) {
/// 自动模式依赖上一个 item 的特性
UINavigationItemLargeTitleDisplayModeAutomatic,
/// 针对当前 item 总是启用大标题特性
UINavigationItemLargeTitleDisplayModeAlways,
/// Never
UINavigationItemLargeTitleDisplayModeNever,
}
*/
// self.navigationItem.largeTitleDisplayMode=UINavigationItemLargeTitleDisplayModeAutomatic;
}
从图上我们可以看到 导航栏高度变大了 ,字体也变粗了
查看了一剑孤城的 一篇博客,讲的比较详细 博客地址: http://www.jianshu.com/p/352f101d6df1
在里面详细介绍了这个尺寸的变化,我这里先借用他的 一些数据和图.
在iOS11导航栏多了一个LargeTitleView,专门显示大字标题用的,整个导航栏的高度达到了96p,这不包括状态栏的高度,也就是说,整个app顶部高度达到了116p,其中statusbar=20,title=44,largetitle=52,不过默认是64p;当然,iPhoneX的高度会更高点,如果不显示大字标题,顶部的高度也达到了88,statusbar=44,title=44,如果显示大字标题,则高度变成了140,statusbar=44,title=44,largetitle=52,也就是说,iPhoneX的刘海高度为24p
总结就是 :
在显示LargeTitleView 时
普通尺寸导航栏高度是 20(status) +44(title)+52(large)
iphone x 导航栏高度 44(status) +44(title)+52(large)
在不需要显示LargeTitleView 时
普通尺寸导航栏高度是 20(status) +44(title)
iphone x 导航栏高度 44(status) +44(title)
2 导航栏搜索控制器 searchController
navigationItem.searchController //iOS 11 新增属性
navigationItem.hidesSearchBarWhenScrolling //决定滑动的时候是否隐藏搜索框;iOS 11 新增属性
#pragma mark searchController
-(void)showSearchController
{
UISearchController* search=[[UISearchController alloc]initWithSearchResultsController:nil];
self.navigationItem.searchController=search;
}
楼主并没有设置显示大图,但是可以看到自动显示了一个largeView.
但是当楼主把这段代码复制进去一个TableViewContoller 的时候 又不会出现这个效果了 ,楼主暂时没找到原因,如果有知道的盆友,希望能分享下.
3 iPhoneX底部tabbar的高度改变
iPhone X不止多了刘海,底部还有一个半角的矩形,使得tabbar多出来了34p的高度
参考: 你可能需要为你的 APP 适配 iOS 11
( App界面适配iOS11(包括iPhoneX的奇葩尺寸)
(http://www.jianshu.com/p/352f101d6df1)