MJRefresh适配ios11以及iPhoneX

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zyzxrj/article/details/78116183

这里写链接内容虽然还没钱买iPhone8和iPhoneX,但是新版的Xcode9已经有相关模拟器了,一打开模拟器惊呆了,那些自定义导航栏的地方都出问题了,原因是iPhoneX状态栏由以前的20->44所以产生了一些问题,但是这边我们不关注这个问题,大多数界面都有的刷新都出了问题,这就很尴尬了,看了很多文章。其中iOS 11 安全区域适配总结这篇文章写得很是详细

大多数文章提供的解决方案都是直接将新增属性contentInsetAdjustmentBehavior直接设置成UIScrollViewContentInsetAdjustmentNever类型,然后再去重新设置contentInset。但是个人感觉这种方式不太好,因为系统推荐的是automatic模式,事实证明不跟随系统步伐迟早很留坑。所以首先想到的是修改mj的源码,经过一番测试,目前暂时未发现问题:

下拉刷新上拉刷新

就在昨天我改完之后发现mj也修改了源码,但是我们思路不太一样,mj是通过修改contentInset的取值,contentInset.top以及contentInset.bottom。我是使用的时候做系统判断,不得不说mj这样该修改的代码量最少,但是也带来一个问题:改变了系统原本变量的意义,而且对赋值取值也优化的不全面。

- (void)setMj_insetT:(CGFloat)mj_insetT
{
    UIEdgeInsets inset = self.contentInset;
    inset.top = mj_insetT;
#ifdef __IPHONE_11_0
    if(@available(iOS 11.0, *)){
        inset.top -= (self.adjustedContentInset.top - self.contentInset.top);
    }
#endif
    self.contentInset = inset;
}

例如这段代码,你设置 self.tableView.mj_insetT = 50本来是想往下偏移50,adjustedContentInset:{88, 0, 78, 0},这样一设置就会变成self.tableView上移38这并不是我们想得到的,考量了一下,我还是决定沿用我自己的修改方法。下载链接:MJRefresh兼容IOS11 demo

猜你喜欢

转载自blog.csdn.net/zyzxrj/article/details/78116183