ios - 为什么 UIPageViewController 中 UITableView 的内容插入在交互后立即变得困惑?

标签 ios objective-c uitableview uipageviewcontroller uicontainerview

我已经创建了一个基于页面的应用程序,并为了一些实验对它进行了修改;我的简单目标是拥有一个 UIPageViewController,其页面将包含一个持有 UITableView 的 UIViewController(经过进一步检查,如果我改用 UITableViewController,我的实验结果是相同的)。 为此,我简单地编辑了项目模板,并使用 Storyboard 的 ContainerView 对象将 UIPageViewController 添加为 RootViewController 的嵌入式 View ,如您在此屏幕截图中所见:

storyboard's controllers

每个 Controller 都通过 Storyboard配置为自动调整 ScrollView 的内容插入,如果我使用此配置启动项目,一切看起来都很好,并且 DataViewController 的 tableview 的内容插入已按预期在导航栏下方正确调整;然而,当用户与 tableview 进行交互时,内容插入中断并且 tableview 位于导航栏下方:

content inset issue with uipageviewcontroller and a tableview

我已经能够通过在 DataViewController 的 viewDidLayoutSubview 方法中手动设置内容插图,并通过在任何 Controller 上禁用 Adjusts Scroll View Insets 来解决这个问题,所以我不需要这个作为解决我的问题的答案。 我的问题是为什么内容插图在第一个 Controller 第一次从 Storyboard加载后立即正确设置,以及为什么它们在任何类型的用户交互后中断。

如需直接测试,here是项目的链接

最佳答案

我不是 100% 确定这是您遇到的问题,但这里有一些关于您的设置的解释:

默认情况下,UIViewController 倾向于配置为在非不透明栏后面扩展其内容,并调整 ScrollView 的插入。在上面的设置中,这意味着容器 VC:

  • 扩展其内容以显示在导航栏后面
  • 将其 ScrollView 的 .contentInset.scrollIndicatorInsets 设置为与导航栏高度相同

“但是,啊!”我听到你说,“那个容器 View Controller 没有 ScrollView ”。好吧,这是棘手的一点:

似乎 UIViewController 的 对“我的 ScrollView ”的定义相当简单,“我在 View 层次结构中向下搜索时遇到的第一个 ScrollView ”。

UIPageViewController 恰好是使用 ScrollView 实现的。所以容器 VC 找到那个 ScrollView ,并调整它的顶部插图。这不是您真正想要的;它会使页面 Controller 感到困惑,并且在某些时候往往会扰乱布局。

简单的解决方案就是为容器 View Controller 关闭 .automaticallyAdjustsScrollViewInsets

然后您需要解决您的表格 View 的下一个问题,需要某种顶部插入来说明导航栏。到目前为止,在我看来最好的方法是在 Storyboard或代码中手动执行此操作。

关于ios - 为什么 UIPageViewController 中 UITableView 的内容插入在交互后立即变得困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728283/

相关文章:

ios - 各个方向的实心阴影

iphone - Flash 卡住 AVCaptureSession

ios - 不允许其他应用播放音乐

ios - 如何检测未正确发布的内容

ios - 从自身创建 NSMutableString 时出现 NSString+Extension 警告

ios - 在 UITableviewCell 中选择行时遇到问题

ios - 在更新 NSFetchedResultsController 之前,Core Data 是否真的将任何更改保存到磁盘?

objective-c - 为我的类(class)采用/实现快速枚举的例子?

swift - '下标(_ :)' is unavailable: cannot subscript String with an Int (Swift 5)

ios - 防止键盘输入附件 View 引起的表格 View 动画