2013-01-22 88 views
0

我有一个名为DashBoardViewController的UIViewController充当UITabBar的代理。在它的xib中,我放置了一个带有3个UITabBarItem的UITabBar。UITabBar UIView不扩展到完整

每个项目激活不同的视图控制器,我们姑且称之为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中的View Controller始终按预期工作,将其扩展到w视图的完整大小。 但是,在第二个和以后的选项卡中,这不会发生:视图不会扩展。这显示了,例如,我是否将选项卡与ViewController2 XIB中的底部对齐:在UITabBarItem中查看时,这不会位于底部。

注意 请注意,这是不相关的厦门国际银行:如果我颠倒ViewController1和ViewController2,这将是ViewController1的一个失败的延伸。它与UITabBarItem有关。

理念 可能,这取决于由当我打电话了DashBoardViewController的initWithNibName我addSubview的方式。但我找不到解释这一点的方法。

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

回答

1

我可以”你真的没有看到你的XIB安装方式,但我可以提出一些建议。

你试图通过删除&添加子视图到DashBoardViewController来实现的行为应该真的由UITabBarController。这提供了一个UITabBar,av浏览您的内容并处理在UIViewControllers之间切换的逻辑,同时保持布局清晰并成为SDK的一部分。

如果由于某种原因,你不能或不想使用的UITabBarController,我建议您DashBoardViewController实施viewWillLayoutSubviews方法,像这样:

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

也许还尝试添加self.currentViewController.view.frame = self.view.bounds;行之后,您也交换了ViewControllers,以获得更好的效果。这将确保当前ViewController视图的框架始终大小设置为填充DashBoardViewController视图的边界。

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

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

+0

这里的(部分)复杂是我的DashBoardViewController驻留在UINavigationController中,我假设由于我需要在单个Tab中共享一些视图,所以最好将它们放在DashBoardViewController中。 – puntofisso

+0

我按照你的建议使用了一个标准的UITabBarController,并在需要时显示子视图为模态。实际上,这种方式看起来好多了。谢谢你的帮助! – puntofisso

0

在你的XIB文件,确保您的设置灵活的高度,坚持到顶部和底部,这种方式的UITableView将始终具有相同的高度4" 显示

enter image description here

+0

是的,我有这样的设置,但我仍然有同样的问题:例如,在UITableView下面留下了一些空间。 – puntofisso

+0

反正它有点不同。我正在更新这个问题。 – puntofisso