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

关于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真是坑)完全解决

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值