ios - UIViewController:extendedLayoutIncludesOpaqueBars 和 ScrollView 偏移

标签 ios uitableview uiviewcontroller uinavigationcontroller uikit

我的应用程序的 View 层次结构非常简单:一个 UINavigationController 包含一个 UITableViewController。导航 Controller 的导航栏是不透明的,这会导致在导航转换期间表格 View 出现一些奇怪的插入行为,如下所示:

Navigation Inset Issue

为了解决这个问题,我将 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/

相关文章:

iOS >> prepareForSegue >> IBOutlet 更新不起作用?

ios - 如何以编程方式从 UIVIew 呈现 View Controller

ios - 应用程式因1.2苹果规范而被拒绝

iphone - 如何以编程方式识别 iPhone 联系人更改

objective-c - iOS - 加载自定义表格单元格导致第二次加载出错

ios - 从 nsdictionary 填充 uitableview

swift - viewDidApper 时调用可重复任务

ios - 自返回首次执行以来,如何返回从 block 中获取的对象?

iphone - iOS - 无法加载表格 View

objective-c - 如何在 iOS8 的 UIAlertController 中添加 UITableview?