一、iOS 11下APP中tableView内容下移20pt或下移64pt的原因分析
问题如下图所示:
问题.png
1. 原因分析
原因是iOS 11中Controller的automaticallyAdjustsScrollViewInsets
属性被废弃了,所以当tableView超出安全区域时系统自动调整了SafeAreaInsets
值,进而影响adjustedContentInset
值,在iOS 11中决定tableView的内容与边缘距离的是adjustedContentInset
属性,而不是contentInset
。adjustedContentInset
的计算方式见本文第二部分内容。因为系统对adjustedContentInset
值进行了调整,所以导致tableView的内容到边缘的距离发生了变化,导致tableView下移了20pt(statusbar高度)或64pt(navigationbar高度)。
如果你的APP中使用的是自定义的navigationbar,隐藏掉系统的navigationbar,并且tableView的frame为(0,0,SCREEN_WIDTH, SCREEN_HEIGHT)开始,那么系统会自动调整SafeAreaInsets值为(20,0,0,0),如果使用了系统的navigationbar,那么SafeAreaInsets
值为(64,0,0,0),如果也使用了系统的tabbar,那么SafeAreaInsets
值为(64,0,49,0)。关于什么情况下会发生内容下移的问题,本文第三部分有介绍。
2. 安全区域的概念
系统自动调整tableView内容偏移量,是根据安全区域来调整的。安全区域是iOS 11新提出的,如下图所示