关于tableView.比如我们某一个页面的tableView的顶部要在statusBar的顶部.也就是屏幕的顶部开始.
有两种解决方案:
1.我们可以设置上面的位置距离顶部是-22(我们知道statusBar的高度是20,但是比如我们设置了热点.那statusBar就变成40了).所以这个解决方案不是很好.
2.我们可以设置ViewController的一个属性:
self.automaticallyAdjustsScrollViewInsets =NO;
设置了这个属性的时候,我们设置tableView到顶部的话就直接怼到顶上了.
然而,到了iOS11.在发布会上记得貌似是那个胖胖的系统工程师讲的(也说了解决方案).上面的这个属性被弃置了.也就是说,这个属性的设置变得无效化了.(亲测).
Xcode9(对应iOS11).新出了一个
@available(iOS 11.0, *)
这个方法来判断本机是多少版本.
我们可以通过这个来判断版本号修复问题
解决方案:
1.建立一个UIViewController的基类:BaseViewController.直接在ViewDidLoad里面写上如下代码:
if (@available(iOS11.0, *)) {
} else {
self.automaticallyAdjustsScrollViewInsets =NO;
}
2.由于滚动的视图都会受影响,那么UITablleView和UICollectionView都需要一个基类...
由于我们可能走的纯代码或者是Xib.那么我们在两个不同的代码里面调用同一份代码.我的建议是写一个setupUI.由于.子类里面可能有不同的变化.
我们可以把setupUI这个方法抛出到.h文件里面.子类用的时候记得要[super setupUI].当然使用分类的方式也不是不可以.
然后.m里面可以这样写:
UITableView:
- (void)awakeFromNib {
[superawakeFromNib];
[self setupUI];
}
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
if (self = [superinitWithFrame:framestyle:style]) {
[self setupUI];
}
return self;
}
- (void)setupUI {
if (@available(iOS11.0, *)) {
self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
}
UICollectionView:
- (void)awakeFromNib {
[superawakeFromNib];
[self setupUI];
}
- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout {
if (self = [superinitWithFrame:framecollectionViewLayout:layout]) {
[self setupUI];
}
return self;
}
- (void)setupUI {
if (@available(iOS11.0, *)) {
self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
}
至此.Bug(由于系统版本更新.这种Bug真是坑)完全解决