1、使用“statusBar”获取网络类型:
注明:此bug不是iOS11的bug,而是iPhone X的,估计是因为那恶心的刘海引起的。。。
之前通过“ statusBar”获取网络类型时大家应该都是这样写的
UIApplication *app = [UIApplication sharedApplication];
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
现在iPhone X中这个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)的界面顶部有留白,关于安全区域可以参考下面文章:
适配代码如下。不知道有没有兄弟和我一样,因为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]