• iOS 滚动视图内容自动偏移总结


    [iOS7 , iOS11):
    viewcontroller参数automaticallyAdjustsScrollViewInsets决定其中scrollview偏移量参数contentInset:

    默认情况下:automaticallyAdjustsScrollViewInsets = YES,contentInset = {64,0,0,0},tabbarcontroller情况下为{64,0,49,0},很容易理解假设设置scorllview的frame为屏幕大小,其可控高度为其高度减掉导航条的64和tabbar的49

    导航条隐藏时,两种情况下contentInset分别是{20,0,0,0},{20,0,49,0},20是状态栏的高度

    [iOS11,~):

    viewcontroller新增所谓安全区域,带来一系列参数:SafeAreaInsets、additionalSafeAreaInsets、adjustedContentInset、contentInsetAdjustmentBehavior……;

    原来的automaticallyAdjustsScrollViewInsets失效了,新的方案认为状态栏导航条、tabbar之间的区域为安全区域

    scrollview的最终偏移量adjustedContentInset = safeAreaInset + contentInset,safeAreaInset的值与iOS 11之前的contentInset相同,iOS11中contentInset默认为{0,0,0,0}

    导航条隐藏时,两种情况下safeAreaInset分别是{20,0,0,0},{20,0,49,0},20是状态栏的高度

    contentInsetAdjustmentBehavior参数:

      UIScrollViewContentInsetAdjustmentAutomatic:如果scrollview在一个controller上,并且这个Controller包含在一个navigation controller中,这种情况下会设置在top & bottom上 adjustedContentInset = safeAreaInset + contentInset不管是否滚动。其他情况下与UIScrollViewContentInsetAdjustmentScrollableAxes相同

      UIScrollViewContentInsetAdjustmentScrollableAxes: 在可滚动方向上adjustedContentInset = safeAreaInset + contentInset,在不可滚动方向上adjustedContentInset = contentInset;依赖于scrollEnabled和alwaysBounceHorizontal / vertical = YES,scrollEnabled默认为yes,所以大多数情况下,计算方式还是adjustedContentInset = safeAreaInset + contentInset

      UIScrollViewContentInsetAdjustmentNever: adjustedContentInset = contentInset

      UIScrollViewContentInsetAdjustmentAlways: adjustedContentInset = safeAreaInset + contentInset

    当contentInsetAdjustmentBehavior设置为UIScrollViewContentInsetAdjustmentNever的时候,adjustContentInset值不受SafeAreaInset值的影响。

    如果你想抵消这种偏移,添加additionalSafeAreaInsets参数。
     

    如果你被苹果这个设计恶心到了

    if (@available(iOS 11.0, *)) {
            self.table.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        } else {
            self.automaticallyAdjustsScrollViewInsets = NO;
        }
    }

    另外注意:edgesForExtendedLayout和extendedLayoutIncludesOpaqueBars

    这两个参数导致的view偏移问题

     

  • 相关阅读:
    lua类对象
    toLua初始化碰到的问题
    Unity经验之谈-DoTween动画结束匿名委托闭包之坑
    toLua关于委托没有注册的解决方案
    xLua使用require改变路径加载Lua脚本
    unity常用的比较函数
    Shader中颜色混合的算法
    UnityShader中插值平滑曲线
    Shader中的Uniforms(只读标识)
    ShaderLab中Properties语义块支持的属性类型
  • 原文地址:https://www.cnblogs.com/helmsyy/p/8880835.html
Copyright © 2020-2023  润新知