iOS 11/iPhone X适配之statusBar获取网络类型 & 安全区域适配无效果

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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容