iOS11 兼容适配和填坑(一)

    就在今年九月,苹果新品发布会推出新产品和iOS11,如今已经进入iOS11时代.
   在ios11时 ,由于新款的iPhone x 的横空出世,给我们的适配和开发带来新的挑战和问题.没办法,苹果爸爸每一次大的改进,都会搞出一些事情的,我们只能淡定的去适应苹果的新功能.

 1   导航栏尺寸变化了先看图
iOS11 兼容适配和填坑(一)_第1张图片
CB242CAE-B3D0-4115-8E3F-E70203B29B9C.png

因为刘海的存在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;
 
 
   }
iOS11 兼容适配和填坑(一)_第2张图片
4025F7E9-A7DA-468D-8C61-CA7951925B57.png

从图上我们可以看到 导航栏高度变大了 ,字体也变粗了
查看了一剑孤城的 一篇博客,讲的比较详细 博客地址: 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)
iOS11 兼容适配和填坑(一)_第3张图片
37DA8151-40C5-4B66-9CA0-B1BE2084CAB3.png
  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;
  }
iOS11 兼容适配和填坑(一)_第4张图片
A245684D-FC2B-4747-B43A-73EDFD8EA82A.png

楼主并没有设置显示大图,但是可以看到自动显示了一个largeView.

但是当楼主把这段代码复制进去一个TableViewContoller 的时候 又不会出现这个效果了 ,楼主暂时没找到原因,如果有知道的盆友,希望能分享下.

   3    iPhoneX底部tabbar的高度改变

iPhone X不止多了刘海,底部还有一个半角的矩形,使得tabbar多出来了34p的高度

参考: 你可能需要为你的 APP 适配 iOS 11

( App界面适配iOS11(包括iPhoneX的奇葩尺寸)
(http://www.jianshu.com/p/352f101d6df1)

你可能感兴趣的:(iOS11 兼容适配和填坑(一))