我的应用程序的 View 层次结构非常简单:一个 UINavigationController
包含一个 UITableViewController
。导航 Controller 的导航栏是不透明的,这会导致在导航转换期间表格 View 出现一些奇怪的插入行为,如下所示:
为了解决这个问题,我将 UITableViewController
上的 extendedLayoutIncludesOpaqueBars
设置为 true
。这样做正确地扩展了导航栏下方的 View ,但以我不太理解的方式改变了 TableView 的 contentOffset
的行为。将此属性设置为 true
后, TableView 的 contentOffset
的 Y 值报告它的偏移量高于导航栏当前高度的应有高度(即,将表格 View 滚动 1pt,它报告其 y 偏移量为 -63pts)。
这让我觉得导航 Controller 会自动管理 ScrollView 的 contentInset
,就像它对半透明栏所做的那样。但是我看不到任何证据表明 ScrollView 在 scrollViewDidScroll()
中设置了内容插入。即使在 TableView Controller 上将 automaticallyAdjustsScrollViewInsets
设置为 false
,内容偏移也不正确,所以它似乎与 insets 无关。
Apple's documentation about extendedLayoutIncludesOpaqueBars
没有提到对 ScrollView 的内容偏移行为的任何影响。不幸的是,更改 TableView 的 contentInset
并不能解决这个问题。
我尝试更改 TableView Controller 的 edgesForExtendedLayout
属性以强制它在不影响 ScrollView 的情况下扩展,但似乎此属性对不透明条无能为力。
extendedLayoutIncludesOpaqueBars
是否有一些隐藏的行为会增加 ScrollView 的内容偏移量?或者这可能是一个错误?
最佳答案
你试过吗?
if #available(iOS 11, *) {
tableView.contentInsetAdjustmentBehavior = .never
}
关于ios - UIViewController:extendedLayoutIncludesOpaqueBars 和 ScrollView 偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812564/