在子视图控制器中调整滚动视图的插入

时间:2015-02-04 08:41:36

标签: ios uiscrollview uinavigationbar

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

UINavigationController (contains) MainViewController (contains) UIPageViewController (contains) UITableViewController

在最内层的UITableViewController中,我将automaticallyAdjustScrollViewInset设置为YES,但此设置似乎无法正常工作。从下面的屏幕截图中可以看出,表格视图contentInset似乎没有使用导航栏进行调整。

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

我该怎么做?谢谢!

enter image description here

2 个答案:

答案 0 :(得分:2)

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

在你的情况下,它没有被传播得足够远。

如果你确定topLayoutGuide将其归结为表视图控制器,那么你就不必手动设置contentInset

此外,您的视图控制器层次结构似乎过于复杂(我不知道您项目的详细信息)。这个简化版本将为您提供免费的服务。

enter image description here

答案 1 :(得分:1)

显然,最外层的UINavigationController仍可通过其navigationController属性访问最内层的UITableViewController。

由于最里面的视图控制器可以访问导航栏的框架,我们可以在其viewDidLayoutSubviews中执行类似的操作。

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

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