Ios 调整滚动视图';在子视图控制器中插入

Ios 调整滚动视图';在子视图控制器中插入,ios,uiscrollview,uinavigationbar,Ios,Uiscrollview,Uinavigationbar,我得到了具有以下父子关系的视图控制器层次结构: UINavigationController (contains) MainViewController (contains) UIPageViewController (contains) UITableViewController 在最内部的UITableViewController中,我将自动调整滚动视图插入设置为YES,但是此设置似乎不起作用。从下面的屏幕截图中可以看出,表视图的contentInset似乎没有使用导航栏进行调整 我的目标

我得到了具有以下父子关系的视图控制器层次结构:

UINavigationController (contains) MainViewController (contains) UIPageViewController (contains) UITableViewController
在最内部的UITableViewController中,我将
自动调整滚动视图插入设置为
YES
,但是此设置似乎不起作用。从下面的屏幕截图中可以看出,表视图的
contentInset
似乎没有使用导航栏进行调整

我的目标是使用最外层的导航栏自动调整此表视图的
contentInset
。如果导航栏或状态栏被隐藏,我希望内容插入相应地调整

我该怎么做?谢谢


显然,最外层的UINavigationController仍然可以通过其
导航控制器
属性访问最内层的UITableViewController

由于导航栏的框架可由最内部的视图控制器访问,因此我们可以在其
viewdilayoutsubview
中执行类似操作

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    self.tableView.contentInset = UIEdgeInsetsMake(CGRectGetMaxY(self.navigationController.navigationBar.frame), 0, 0, 0);
    self.tableView.scrollIndicatorInsets = self.tableView.contentInset;
}

UINavigationController会自动调整其子视图控制器的
topLayoutGuide

在您的情况下,它没有被传播到足够远的地方

如果您确保此
topLayoutGuide
可用于您的表视图控制器,则无需手动设置
contentInset

此外,视图控制器层次结构似乎过于复杂(我不知道项目的详细信息)。你所拥有的东西的简化版本将免费为你提供你想要的东西


我有相同的设置,仍然需要手动调整顶部插图。任何方向?检查视图控制器上是否设置了包含容器视图的
automaticallyAdjustScrollViewInset
。结果表明,当
automaticallyAdjustScrollViewInset
为真时,仅浏览视图控制器视图的第一个子视图以查找滚动视图。此外,它会在找到滚动视图后立即停止,因此,如果您有多个容器,它将仅对第一个容器起作用。在我的例子中,我在容器视图后面有一个图像视图,因此最后一个视图不是滚动视图,因此它不适应顶部插图。唯一的解决方案是手动插入自适应。