XCode9 + iOS11环境下UIScrollView出现的头部偏移问题

对于XCode9 + iOS11环境下 UITableView、UIScrollView向下偏移的问题
iOS11增加了安全区域:
SafeAreaInsets值
在使用系统的navigationBar的情况下:
SafeAreaInsets值为(64,0,0,0)
在未使用或者navigationBar设置为隐藏的时候:
SafeAreaInsets值为(20,0,0,0)
如果也使用了系统的tabbar:
SafeAreaInsets值为(64,0,49,0)或(20,0,49,0)
解决办法一:
根据iOS11新增的两个属性:adjustContentInset 和 contentInsetAdjustmentBehavior
该方式可以解决WKWebView偏移的一些问题

    if (@available(iOS 11.0, *)) {
        self.additionalSafeAreaInsets = UIEdgeInsetsMake(0, 0, 0, 0);
        // 如果使用了navigationBar隐藏的情况
        // self.navigationController.additionalSafeAreaInsets = UIEdgeInsetsMake(-20, 0, 0, 0);
    } else {
        self.automaticallyAdjustsScrollViewInsets = false;
    }

办法二:
根据取代automaticallyAdjustsScrollViewInsets属性的contentInsetAdjustmentBehavior属性

    if (@available(iOS 11.0, *)) {
        self.webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        // 设置内边距
        self.webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
        // 设置滚动条的内边距
        self.webView.scrollView.scrollIndicatorInsets = self.webView.scrollView.contentInset;
    } else {
        self.automaticallyAdjustsScrollViewInsets = false;
    }

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets API_DEPRECATED_WITH_REPLACEMENT("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); // Defaults to YES
iOS11 中, UIViewController的automaticallyAdjustsScrollViewInsets属性已经不再使用,我们需要使用UIScrollView的 contentInsetAdjustmentBehavior 属性来替代它.
UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种:
automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距.
scrollableAxes 自动计算内边距.
never不计算内边距
always 根据safeAreaInsets 计算内边距
很显然,我们这里要设置为 never

你可能感兴趣的:(XCode9 + iOS11环境下UIScrollView出现的头部偏移问题)