【问题标题】:Add a UINavigationController nested inside a container view controller to a UITabBarController将嵌套在容器视图控制器中的 UINavigationController 添加到 UITabBarController
【发布时间】:2014-06-13 22:50:10
【问题描述】:

我将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];
}

根据我对视图控制器包含的了解,这应该工作,因为我明确设置导航控制器的框架。但是,当tableView 中有足够的单元格超过容器的高度时,当我向下滚动时,tableView 的末尾总会有一个条形图。我已将tableViewbackgroundColor 设置为橙色,并将单元格的backgroundColor 设置为白色,以便查看差异。

如何消除tableView 末尾的橙色间隙?

(注意:我使用自动布局,我需要一个同时适用于 iOS7 iOS6的解决方案。)

【问题讨论】:

  • 设置tableView的背景颜色为nil,那么问题就出在这了。
  • tableView 的颜色无关紧要。这是不应该存在的差距或“额外行”。
  • 我认为子 VC(导航控制器)尊重父标签栏。
  • 我同意。问题是:如何让表格视图控制器了解它不应该尊重父标签栏本身?因为很明显,导航视图控制器会正确调整其相对于标签栏的高度,而不是表格视图的工作......
  • 你最终解决了这个问题吗?

标签: ios uitableview uiview uinavigationcontroller containment


【解决方案1】:

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

self.extendedLayoutIncludesOpaqueBars = YES;

【讨论】:

  • 也可以在 InterfaceBuilder 上的 Attributes Inspector -> View Controller -> Extend Edges: Under Opaque bars 上定义
【解决方案2】:

您是否尝试在-(void)viewDidLoadTable View Controller - Root 中设置self.edgesForExtendedLayout = UIRectEdgeAll;

注意:仅限 iOS 7

【讨论】:

  • 我需要一个也适用于 iOS 6 的解决方案(更新了我的问题)。但我也尝试了你的建议,但它在 iOS 7 中不起作用。
猜你喜欢
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
相关资源
最近更新 更多