ios - 您可以为容器 Controller 设置 ScrollView 插入吗?

标签 ios uiscrollview uikit

我有一个容器 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/

相关文章:

ios - UIButton 的 .touchUpInside 事件不起作用

ios - UITableView,未调用 cellForRowAt indexPath

ios - UIScrollView 交互区域不随 frame/contentSize 更新

ios - UIScrollView 内的 UIWebView

ios - 启用颜色混合图层后,是否可以将带有非英文字符的 UILabel 设置为绿色?

ios - 线程安全的 UIKit 方法

ios - UIScrollView - 像 iOS 7 邮件应用程序一样通过触摸拖动移动键盘?

javascript - Canvas 不会在带有 cordova 和 pixi.js 的 iphone 上呈现

ios - 将 UITableView 滑动到屏幕上,继续滑动?

ios - 'sizeWithFont :constrainedToSize:lineBreakMode:'is deprecated: