iOS页面结构:UIScrollView的结构题目

源代码 2024-10-1 20:28:45 43 0 来自 中国
一、简述

在iOS11以后的体系中UIViewController的automaticallyAdjustsScrollViewInsets这个属性逾期弃用了不再发起使用了。体系保举我们使用UIScrollView的contentInsetAdjustmentBehavior属性替换它。如果项目之前使用了self. automaticallyAdjustsScrollViewInsets = YES,而且设置scrollView.contentInset的值,此时升级到iOS11以上的体系时页面就会出现结构题目。下面简单的写下关于contentInsetAdjustmentBehavior这个属性的明确。关于这个属性提供了四种设置值。
备注:当UIScrollView的frame超出安全区域时,contentInsetAdjustmentBehavior决定了adjustContentInset的盘算方式是否会受到safeAreaInset安全区域值的影响,进而影响了adjustContentInset的终极值。终极影响到UIScrollView的content的内边距。
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {    UIScrollViewContentInsetAdjustmentAutomatic,     UIScrollViewContentInsetAdjustmentScrollableAxes,     UIScrollViewContentInsetAdjustmentNever,     UIScrollViewContentInsetAdjustmentAlways,} 二、UIScrollViewContentInsetAdjustmentBehavior 和 adjustContentInset

1. UIScrollViewContentInsetAdjustmentAutomatic
默认值,scrollView会根据页面的安全区域的值自动调解盘算,体系在盘算content的edgeInset时会思量到安全区域自动盘算和顺应顶部和底部的内边距。纵然UIScrollView不可滚动,也会自动设置content的内边距。其他情况下运动与UIScrollViewContentInsetAdjustmentScrollableAxes雷同。

  • 怎样盘算adjustContentInset值:
adjustContentInset =  safeAreaInset + contentInset
2. UIScrollViewContentInsetAdjustmentScrollableAxes
也是自动调解盘算,但是会思量滚动方向,体系会根据UIScrollView的滚动方向举行判定内容的内边距是否要思量安全区域,依靠于scrollEnabled和alwaysBounceHorizontal / vertical = YES。
eg. 如果是一个横向滚动的UIScrollView,及便结构出发点和高度值凌驾了页面的安全区,那么体系也不会调解。

  • 怎样盘算adjustContentInset值:
可滚动方向:
adjustContentInset = safeAreaInset + contentInset
不可滚动方向:
adjustContentInset = contentInset
3. UIScrollViewContentInsetAdjustmentNever
内容的内边距从不思量安全区域,当contentInsetAdjustmentBehavior设置为Never的时候,adjustContentInset值不受SafeAreaInset值的影响。
eg.  就算UIScrollView超出了safeAreaInsets,体系不会对你的scrollView.adjustedContentInset做任何事故,即不作任何调解。

  • 怎样盘算adjustContentInset值:
adjustContentInset = contentInset
4. UIScrollViewContentInsetAdjustmentAlways
内容的内边距总是思量安全区域,只要UIScrollView的frame超出安全区域就调解相应top&bottom的超出值,调解的最大值不会凌驾安全区相应方向的间隔的最大值。

  • 怎样盘算adjustContentInset值:
adjustContentInset = safeAreaInset + contentInset
三、测试


  • 测试一: 默认设置 contentInsetAdjustmentBehavior为Automatic,页面延伸结构为整个屏幕,从屏幕顶端开始盘算;

由图1可见,在默认设置下UITableView的内容表现正常,其内容的内边距盘算思量到了安全间隔。
view.safeAreaInsets = {88, 0, 83, 0}tableView.contentInset = {0, 0, 0, 0}tableView.adjustedContentInset = {88, 0, 83, 0}

  • 测试二: 默认设置 contentInsetAdjustmentBehavior为Automatic,页面延伸结构为整个屏幕,从屏幕顶端开始盘算,而且设置UITableView的contentInset的值为UIEdgeInsetsMake(40, 0, 0, 0);
    2.png
由图2可见,在此设置下UITableView的内容表现不正常,UITableView的内容的内边距向下偏移了40
view.safeAreaInsets = {88, 0, 83, 0}tableView.contentInset = {40, 0, 0, 0}tableView.adjustedContentInset = {128, 0, 83, 0}

  • 测试三:  默认设置 contentInsetAdjustmentBehavior为Automatic,页面延伸结构为整个屏幕,从屏幕顶端开始盘算,而且设置UITableView的frame的y值为50;
view.safeAreaInsets = {88, 0, 83, 0}tableView.contentInset = {0, 0, 0, 0}tableView.adjustedContentInset = {38, 0, 83, 0}

  • 测试四: 默认设置 contentInsetAdjustmentBehavior为Automatic,页面延伸结构为整个屏幕,从屏幕顶端开始盘算,而且设置UITableView的frame的y值为-50;
4.png view.safeAreaInsets = {88, 0, 83, 0}tableView.contentInset = {0, 0, 0, 0}tableView.adjustedContentInset = {88, 0, 83, 0}由图3可见,在UITableView的顶部偏移父view的顶端50像素,下移,在此设置下UITableView的内容表现正常,而且调解值小于安全区域垂直方向的最大值;
由图4可见,在UITableView的顶部偏移父view的顶端-50像素,上移,在此设置下UITableView的内容表现不正常,而且调解值为安全区域垂直方向的最大值;
团结图3和图4,可证实调解的最大值不会凌驾安全区相应方向的间隔的最大值。


  • 测试五: 设置 contentInsetAdjustmentBehavior为Never,页面延伸结构为整个屏幕,从屏幕顶端开始盘算;
view.safeAreaInsets = {88, 0, 83, 0}tableView.contentInset = {0, 0, 0, 0}tableView.adjustedContentInset = {0, 0, 0, 0}由图5可见,在设置为Never时,UITableView的内容内边距不会再思量安全区域,因此体系盘算adjustedContentInset的调解至为0,页面结构表现非常,此时adjustedContentInset = contentInset。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 04:46, Processed in 0.172672 second(s), 36 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表