【问题标题】:automaticallyAdjustsScrollViewInsets doesn't work in embedded UITableViewController with UITableViewautomaticAdjustsScrollViewInsets 在带有 UITableView 的嵌入式 UITableViewController 中不起作用
【发布时间】:2015-02-11 21:26:27
【问题描述】:

当您在 UIViewController 中有 UITableView 时,您必须关闭 automaticAdjustsScrollViewInsets 标志(在代码或情节提要编辑器中)以获得顶部空间以避免顶部栏。我现在有一个子 UIViewController 在包含 UITableView 的子视图中使用“嵌入”序列。我看到了“空间”(黄色区域),但我清除了嵌入式 UIViewController 中的所有标志,甚至在 prepareForSeque 中手动清除了标志,但空间仍然存在。是否还有其他事情要做,或者这是一个错误?

【问题讨论】:

  • 这个黄色区域是嵌入式VC还是父VC的一部分?
  • 嵌入式,就是表格视图顶部的空白区域。
  • 表格视图的框架是什么?签入viewDidAppear
  • 应该是高度。黄色区域是表格视图的背景颜色。该表为 157,父视图为 173,情节提要将父视图的高度设置为 173,约束将表设置为在所有方面缩进 8,因此表的大小正确。尽管被告知不要,但只是应用了滚动视图插图。
  • 无法将其简化为代码。它主要在故事板中。使用单个 UIViewController 创建一个 UINavigationController。从调色板添加一个小的容器视图。将 UITableViewController 放在子项中(通过 Embed 序列连接到容器。连接表格以显示一些数据。将表格的背景设置为黄色以便您可以看到它。使用约束来确保所有内容的大小

标签: ios uitableview uiviewcontroller


【解决方案1】:

今天早上遇到了这个问题。

事实证明,当您像以前一样使用嵌入式视图控制器模式时,您需要从 parentViewController 中取消选中 automaticallyAdjustsScrollViewInsets 属性而不是 child。

这是我的 UI 结构:

ParentViewController 有一个容器视图,它指向 ChildViewControllerUITableViewController 的子类)。

取消选中 ChildViewController 中的自动AdjustsScrollViewInsets:不起作用

取消选中 ParentViewController 中的自动AdjustsScrollViewInsets:有效!

【讨论】:

    【解决方案2】:

    我已经为此苦苦挣扎了好几个小时,直到我意识到@user3188985 的答案是正在发生的事情,尽管该解决方案对我不起作用。

    这是因为我有两个包含的视图控制器,每个都包含滚动视图,我想要一个调整,一个不调整,该怎么办?


    如果您在父控制器中关闭自动调整,那么您必须手动调整您需要的一个滚动视图,例如在适当的情况下设置 contentInset。


    如果您在父级中保留自动调整,我发现一个虚拟的滚动视图,零帧,隐藏,所有滚动属性设置为 NO,如果它在子视图控制器中可见/启用的滚动视图之前视图层次结构,然后它将接收自动调整,并保留可见的滚动视图视图。

    或者,您可以让包含的视图控制器的最顶层视图成为禁用滚动的滚动视图,并让它包含另一个启用滚动的滚动视图,这将实现与“虚拟”方法相同的效果。


    您在这里可以看到,只考虑了父视图控制器的自动调整标志,但它自己的视图控制器层次结构被遍历以在每个包含的控制器中找到要调整的滚动视图。这只是不需要的 UIKit 行为。在决定弄乱它之前检查每个子控制器的自动调整设置会很好:/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多