UITabBar中的UIView没有扩展到完整

时间:2013-01-22 16:49:25

标签: ios uitableview uiview uitabbarcontroller uitabbar

我有一个名为DashBoardViewController的UIViewController,它充当UITabBar的委托。在它的xib中,我放置了一个带有3个UITabBarItem的UITabBar。

这些项目中的每一项都会激活不同的View Controller,我们称之为ViewController1,ViewController2,ViewController3

DashBoardViewController应该显示ViewController1并在加载时选择第一个栏,所以在我的initWithNibName中我有以下内容:

...
ViewController1* vc = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
[self.view addSubview:vc.view]; 
self.currentViewController = vc;
...

我实现了UITabBarDelegate,其内容如下:

if (item == viewController1Item) {
    ViewController2 *vc2 = [self.childrenControllers objectAtIndex:1];


    [self.currentViewController.view removeFromSuperview];
    [self.view addSubview:vc2.view];
    self.currentViewController = vc2;


} ...

问题 第一个UITabBarItem中的视图控制器始终按预期工作,将其扩展到视图的完整大小。 但是,在第二个和后面的选项卡中,不会发生这种情况:视图不会延伸。这显示了,例如,我是否在ViewController2 XIB中将制表符与底部对齐:在UITabBarItem中查看时,这不会位于底部。

注意 请注意,这与XIB无关:如果我反转ViewController1和ViewController2,那么ViewController1将无法扩展。它与UITabBarItem有关。

可能,这取决于我调用DashBoardViewController的initWithNibName时addSubview的方式。但我找不到解释这个的方法。

其他详情 所有XIB都设置为“Size = none”。

2 个答案:

答案 0 :(得分:1)

如果没有看到你的XIB设置,我真的无法说话,但我可以提出一些建议。

您尝试通过删除&将子视图添加到DashBoardViewController应该真正由UITabBarController处理。这提供了一个UITabBar,一个内容视图,并处理UIViewControllers之间切换的逻辑,同时保持布局合理并成为SDK的一部分。

如果由于某种原因你不能或不想使用UITabBarController,我建议你在DashBoardViewController上实现一个viewWillLayoutSubviews方法,如下所示:

- (void)viewWillLayoutSubviews
{
    if( self.currentViewController )
    {
        self.currentViewController.view.frame = self.view.bounds;
    }
}

也可以尝试在交换ViewControllers之后添加self.currentViewController.view.frame = self.view.bounds;行,以便更好地衡量。这将确保当前ViewController视图的框架总是调整大小以填充DashBoardViewController视图的边界。

这不是'正确'的方法,但是如果可以的话,我真的建议使用UITabBarController,因为你不知道UITabBarController还有多少你最终会重新实现开始滚动你自己的控制器。

任何进一步的问题很可能与子ViewControllers的内部布局有关,而不是在DashBoardViewController视图中的大小/位置。

答案 1 :(得分:0)

在您的XIB文件上确保您设置灵活的高度以粘贴到顶部和底部,这样UITableView将始终具有与4“显示器相同的高度

enter image description here