美文网首页
Iphone X 与 IOS 11 适配记录

Iphone X 与 IOS 11 适配记录

作者: leonardni | 来源:发表于2017-11-06 14:08 被阅读158次

    一、IOS 11适配


    1.1 导航栏

    导航栏高度的变化

    iOS11之前导航栏默认高度为64pt(这里高度指statusBar + NavigationBar),iOS11之后如果设置了prefersLargeTitles = YES则为96pt,默认情况下还是64pt,但在iPhoneX上由于刘海的出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt,如果项目里隐藏了导航栏加了自定义按钮之类的,这里需要注意适配一下。

    导航栏图层及对titleView布局的影响

    iOS11之前导航栏的title是添加在UINavigationItemView上面,而navigationBarButton则直接添加在UINavigationBar上面,如果设置了titleView,则titleView也是直接添加在UINavigationBar上面。iOS11之后,大概因为largeTitle的原因,视图层级发生了变化,如果没有给titleView赋值,则titleView会直接添加在_UINavigationBarContentView上面,如果赋值了titleView,则会把titleView添加在_UITAMICAdaptorView上,而navigationBarButton被加在了_UIButtonBarStackView上,然后他们都被加在了_UINavigationBarContentView上,如图:



    所以如果你的项目是自定义的navigationBar,那么在iOS11上运行就可能出现布局错乱的bug,解决办法是重写UINavigationBar的layoutSubviews方法,调整布局,上代码:

    - (void)layoutSubviews {
        [super layoutSubviews];
         
        //注意导航栏及状态栏高度适配
        self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), naviBarHeight);
        for (UIView *view in self.subviews) {
            if([NSStringFromClass([view class]) containsString:@"Background"]) {
                view.frame = self.bounds;
            }
            else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
                CGRect frame = view.frame;
                frame.origin.y = statusBarHeight;
                frame.size.height = self.bounds.size.height - frame.origin.y;
                view.frame = frame;
            }
        }
    }
    

    再补充一点,看了简书App适配iOS11发现titleView支持autolayout,这要求titleView必须是能够自撑开的或实现了- intrinsicContentSize方法

    - (CGSize)intrinsicContentSize {
        return UILayoutFittingExpandedSize;
    }
    

    这里补充一个关于intrinsicContentSize知识点链接
    http://blog.csdn.net/hard_man/article/details/50888377

    1.2 使用FDTemplateLayoutCell 在IOS11上计算的cell高度不对


    这是因为IOS11上默认是开启了cell的高度估算机制,关闭即可。

        _tableView.estimatedRowHeight = 0;
        _tableView.estimatedSectionFooterHeight = 0;
        _tableView.estimatedSectionHeaderHeight = 0;
    

    二、Iphone X 适配


    官方IphoneX适配文档

    2.1 启动页的适配

    iPhone X采用的和iPhone 6p一样的@3x的图,而不是传说中的@4x图。
    如果你是用的是LaunchImage来管理启动页,那就可以找设计妹子弄一张1125 * 2436分辨率的启动图就行。如果你使用的是LaunchScreen来适配的启动页,听我一句也去问问设计妹子吧,毕竟iPhone X的高宽比(iPhone X采用了iPhone 8的宽,却比iPhone 8p都要高)发生了变化,拉伸了设计妹子的图,会给你拼命的,
    说的那么多废话,就一点是重要的iPhone X 的屏幕平尺变为1125 * 2436
    `

    相关文章

      网友评论

          本文标题:Iphone X 与 IOS 11 适配记录

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