你能为容器控制器设置滚动视图插图吗?

Rei*_*ain 6 uiscrollview uikit ios

我有一个容器控制器,在lop布局指南下面显示一条数据条.

我希望此容器控制器的子控制器能够在此栏后面滚动以及任何导航栏和状态栏.但是,当UIKit自动调整控制器的滚动视图插图时,它似乎只考虑了顶部布局指南的长度.

有没有办法说滚动视图插图应该是顶部布局指南+我的栏的高度?我知道人们会建议我设置,automaticallyAdjustsScrollViewInsets = NO但我已经尝试过了.问题是,当UIKit设置内容插入时,我似乎无法完全复制,因此我得到了各种奇怪的边缘情况,打破了插入.最突出的例子是UITableViewController,因为我手动设置内容插入,刷新控件有时不在正确的位置,当我结束刷新滚动视图的插图时设置为{0,0}所以内容隐藏在后面我的栏和导航栏.

更新:所有魔法似乎都_setNavigationControllerContentInsetAdjustment在UIViewController和_computeAndApplyScrollContentInsetDeltaForViewControllerUINavigationController 上的方法中.

似乎只有导航控制器尝试调整滚动视图插图,并根据顶部和底部布局指南计算插入.它将这些插入传递给视图控制器,然后视图控制器从滚动视图添加/减去插入,并考虑先前已设置的导航内容插入.这确保了如果其他人在现在和导航控制器上次修改插入时修改了内容插入,则它们不会覆盖中间更改.

Rei*_*ain 2

我的解决方案是自己设置automaticallyAdjustsScrollViewInsets = NO和处理内容插图的设置。

我在 UIViewController 上创建了一个类别,用于跟踪已设置的任何现有插图,因此每当我调整插图以使滚动视图出现在自定义 UIView 下方时,我都不会丢失任何信息,例如带有主动刷新的 UITableViewController 的内容插图控制在里面。

之后,最后一个挑战是弄清楚在哪里设置自定义插图,经过多次实验,我发现这- (void)viewDidLayoutSubviews是最好的地方。

FDScrollingTabBarController是我在其中实现此解决方案的容器控制器。