您的位置:首页 > 产品设计 > UI/UE

关于iOS11下关于UIViewController属性弃用导致含有ScrollView功能的控件出现问题的解决方案

2017-09-22 17:55 501 查看
关于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:frame
style: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:frame
collectionViewLayout:layout]) {
        [self
setupUI];
    }
    return self;
}

- (void)setupUI {
    if (@available(iOS11.0, *)) {
        self.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;
    } else {
        // Fallback on earlier versions
    }
}
至此.Bug(由于系统版本更新.这种Bug真是坑)完全解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐