我有一个容器 Controller ,它在 lop 布局指南的正下方显示一条数据。
我希望这个容器 Controller 的子 Controller 能够在这个栏以及任何导航栏和状态栏后面滚动。然而,当 UIKit 自动调整 Controller 的 ScrollView 插入时,它似乎只考虑了顶部布局指南的长度。
有什么办法可以说 ScrollView 插图应该是顶部布局指南 + 我的栏的高度?我知道人们会建议我设置 automaticallyAdjustsScrollViewInsets = NO
但我已经尝试过了。问题是当 UIKit 设置内容插图时,我似乎无法准确复制,所以我得到了各种破坏插图的奇怪边缘情况。最突出的例子是 UITableViewController,因为我手动设置了内容插入,刷新控件有时不在正确的位置,当我结束刷新 ScrollView 的插入设置为 { 0, 0 } 所以内容隐藏在后面我的栏和导航栏。
更新:所有的魔法似乎都在 UIViewController 的方法 _setNavigationControllerContentInsetAdjustment
和 UINavigationController 的 _computeAndApplyScrollContentInsetDeltaForViewController
中。
似乎只有导航 Controller 会尝试调整 ScrollView 插图,并根据顶部和底部布局指南计算插图。它将这些插图传递到 View Controller ,然后 View Controller 从 ScrollView 中添加/减去插图,并考虑之前设置的导航内容插图。这确保如果其他任何人在现在和导航 Controller 上次修改插图之间修改了内容插图,他们将不会覆盖中间更改。
最佳答案
我的解决方案是设置 automaticallyAdjustsScrollViewInsets = NO
并自己处理内容插入的设置。
我在 UIViewController 上创建了一个 category 来跟踪任何已设置的现有插图,因此每当我调整插图以使 ScrollView 出现在我的自定义 UIView 下方时,我都不会丢失任何信息,例如 UITableViewController 的内容插图它里面有一个事件的刷新控件。
在那之后,最后一个挑战是弄清楚在哪里设置自定义插图,经过大量试验后,我发现 - (void)viewDidLayoutSubviews
是最好的地方。
FDScrollingTabBarController 是我在其中实现此解决方案的容器 Controller 。
关于ios - 您可以为容器 Controller 设置 ScrollView 插入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308428/