我有一个具有以下父子关系的视图控制器层次结构:
UINavigationController (contains) MainViewController (contains) UIPageViewController (contains) UITableViewController
在最内层的UITableViewController中,我将automaticallyAdjustScrollViewInset
设置为YES
,但此设置似乎无法正常工作。从下面的屏幕截图中可以看出,表格视图contentInset
似乎没有使用导航栏进行调整。
我的目标是使用最外面的导航栏自动调整此表格视图contentInset
。如果导航栏或状态栏被隐藏,我希望内容插入相应地进行调整。
我该怎么做?谢谢!
答案 0 :(得分:2)
UINavigationController自动调整其子视图控制器topLayoutGuide
。
在你的情况下,它没有被传播得足够远。
如果你确定topLayoutGuide
将其归结为表视图控制器,那么你就不必手动设置contentInset
。
此外,您的视图控制器层次结构似乎过于复杂(我不知道您项目的详细信息)。这个简化版本将为您提供免费的服务。
答案 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;
}