将一个UINavigationController嵌套在一个容器视图控制器中,添加到UITabBarController中。

6
我有一个UIViewController(红色)作为UITabBarController的第一个标签,如下图所示。这个视图控制器是一个容器视图控制器,并在其contentView中加载了一个UINavigationController(白色矩形)。
以下是我加载导航控制器到红色视图控制器的contentView中的代码:
- (void)viewDidLoad
{
    [super viewDidLoad];

    // instantiate navigation controller
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UINavigationController *navigationVC = [storyboard instantiateViewControllerWithIdentifier:@"N"];

    // place navigation controller inside content view
    [self addChildViewController:navigationVC];
    navigationVC.view.frame = self.containerView.bounds;
    [self.containerView addSubview:navigationVC.view];
    [navigationVC didMoveToParentViewController:self];
}

据我对视图控制器的包容性的了解,由于我明确设置了导航控制器的框架,因此这应该可以起作用。然而,当表视图中有足够的单元格超过容器的高度时,当我向下滚动时,总会有一个栏位于表视图的末尾。我已将表视图的背景色设置为橙色,并将单元格的背景色设置为白色,以便看到差异。
如何消除表视图末尾的橙色间隙?
(注意:我没有使用自动布局,并且需要适用于iOS7和iOS6的解决方案。)

将tableView的背景颜色设置为nil,那么有什么问题吗? - Kumar KL
tableView 的颜色并不重要,重要的是不能有间隙或“额外的行”。 - Mischa
1
我认为子VC(导航控制器)正在尊重父级标签栏。 - damirstuhec
我同意。问题是:我该如何让表视图控制器明白它不应该尊重父选项卡栏本身?因为显然,导航视图控制器会正确地相对于选项卡栏调整其高度,而这并不是表视图的工作... - Mischa
你最终解决了这个问题吗? - Pascal Bourque
你解决了吗?也许 containerVC.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight; 可以起作用? - rohan-patel
2个回答

4

我知道您也在寻找适用于iOS 6的答案,但在iOS 7及以上版本中,您可以使用

self.extendedLayoutIncludesOpaqueBars = YES;

它也可以在InterfaceBuilder上定义,位于Attributes Inspector -> View Controller -> Extend Edges: Under Opaque bars下。 - BuguiBu

0

你尝试过在Table View Controller - Root-(void)viewDidLoad方法中设置self.edgesForExtendedLayout = UIRectEdgeAll;吗?

注意:仅适用于iOS 7。


我需要一个适用于iOS 6的解决方案(已更新我的问题)。但我也尝试了您的建议,它在iOS 7中不起作用。 - Mischa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接