美文网首页
iOS 11/iPhone X适配之statusBar获取网络类

iOS 11/iPhone X适配之statusBar获取网络类

作者: vincent涵 | 来源:发表于2017-09-22 14:12 被阅读326次

    1、使用“statusBar”获取网络类型:

    注明:此bug不是iOS11的bug,而是iPhone X的,估计是因为那恶心的刘海引起的。。。

    之前通过“ statusBar”获取网络类型时大家应该都是这样写的

        UIApplication *app = [UIApplication sharedApplication];
        NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
    

    现在iPhone X中这个statusBar的属性层级结构发生了变化,直接多了一层,因而产生崩溃,层级结构如下图:


    statusBar层级结构

    所以现在需要适配如下:

        UIApplication *app = [UIApplication sharedApplication];
        NSArray *subviews = nil;
        if (ScreenHeight == 812) {
            subviews = [[[[app valueForKey:@"statusBar"] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
        } else {
            subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
        }
    

    2、安全区域适配(为啥别人都适配好了你没效果😂)

    由于安全区域导致部分导航栏隐藏并且带scrollview(tableview、collectionview)的界面顶部有留白,关于安全区域可以参考下面文章:

    iOS 11 安全区域适配总结

    适配代码如下。不知道有没有兄弟和我一样,因为automaticallyAdjustsScrollViewInsets是控制器的属性,原来我写在控制器加载完毕一开始的位置,在tableview生成之前,结果自然就没有效果了,自己纠结了好久。。。

    if (@available(iOS 11.0, *)) {
        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    } else {
        self.automaticallyAdjustsScrollViewInsets = NO;
    }
    

    3、UIBarButtonItem自定义view的frame设置无效,必须autolayout

    原先下面的customView用frame写好了大小结果到iOS11里无效了,必须用autolayout再设置一遍大小,我是用的masonry

            [_scancodeCell mas_makeConstraints:^(MASConstraintMaker *make) {
                make.size.mas_equalTo(CGSizeMake(barCellSize.width, barCellSize.height));
            }];
            [[UIBarButtonItem alloc]initWithCustomView:customView]
    

    相关文章

      网友评论

          本文标题:iOS 11/iPhone X适配之statusBar获取网络类

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