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偏移问题

     

  • 相关阅读:
    RabbitMQ安装与配置
    在Web项目中使用shiro
    solr整合spring
    mycat
    SpringSession管理
    Nginx安装与配置(Nginx服务器和Tomcat服务器是不同的服务器)
    dubbo负载均衡与服务降级以及Zookeeper认证
    小笔记
    SpringMVC路径转发与重定向
    java-同步控制及不可变设置(只读访问)
  • 原文地址:https://www.cnblogs.com/helmsyy/p/8880835.html
Copyright © 2011-2022 走看看