美文网首页
iOS11 兼容适配和填坑(一)

iOS11 兼容适配和填坑(一)

作者: 进阶的蚊子 | 来源:发表于2017-09-26 16:56 被阅读403次
        就在今年九月,苹果新品发布会推出新产品和iOS11,如今已经进入iOS11时代.
       在ios11时 ,由于新款的iPhone x 的横空出世,给我们的适配和开发带来新的挑战和问题.没办法,苹果爸爸每一次大的改进,都会搞出一些事情的,我们只能淡定的去适应苹果的新功能.
    
     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;
     
     
       }
    
    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)
    
    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;
      }
    
    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 兼容适配和填坑(一)

          本文链接:https://www.haomeiwen.com/subject/cywsextx.html