我已经创建了一个基于页面的应用程序,并为了一些实验对它进行了修改;我的简单目标是拥有一个 UIPageViewController,其页面将包含一个持有 UITableView 的 UIViewController(经过进一步检查,如果我改用 UITableViewController,我的实验结果是相同的)。 为此,我简单地编辑了项目模板,并使用 Storyboard 的 ContainerView 对象将 UIPageViewController 添加为 RootViewController 的嵌入式 View ,如您在此屏幕截图中所见:
每个 Controller 都通过 Storyboard配置为自动调整 ScrollView 的内容插入,如果我使用此配置启动项目,一切看起来都很好,并且 DataViewController 的 tableview 的内容插入已按预期在导航栏下方正确调整;然而,当用户与 tableview 进行交互时,内容插入中断并且 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/