zoukankan      html  css  js  c++  java
  • 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偏移问题

     

  • 相关阅读:
    招聘asp.net mvc, C#软件开发
    成功后面是付出===来硅谷三个月来第一篇关于硅谷的文章
    招聘Web前端开发
    记人之长,忘人之短;谈人之善,容人之过
    如何减少Outlook占用空间
    流程管理误区
    在Windows Server 2008上安装 Windows SharePoint Services 3.0
    在WinXP or Vista上开发Webpart
    成功后面是付出===来硅谷三个月来第一篇关于硅谷的文章(续篇)
    poj 2362 hdoj 1518 Square(搜索)
  • 原文地址:https://www.cnblogs.com/helmsyy/p/8880835.html
Copyright © 2011-2022 走看看