UITabBarController 仅显示其 UITabBar 的一半(屏幕外)

Posted

技术标签:

【中文标题】UITabBarController 仅显示其 UITabBar 的一半(屏幕外)【英文标题】:UITabBarController only showing half of its UITabBar (off screen) 【发布时间】:2011-06-18 21:40:24 【问题描述】:

从 UIViewController 呈现 UITabBarController 后,我的 UITabBar 没有完全显示。请问你能告诉我我做错了什么吗?

我的代码是:

//some method

LoggedInViewController *lvc = [[[LoggedInViewController alloc] initWithAccount:account] autorelease];
[self presentModalViewController:lvc animated:YES];

- (void)viewDidLoad


    self.tabController = [[UITabBarController alloc] init];
    LoggedInFeedNavigationController *navController = [[LoggedInFeedNavigationController alloc] initWithAccount:self.account];
    [self.tabController setViewControllers:[NSArray arrayWithObject:navController]];
    [self.view addSubview:self.tabController.view];
    [super viewDidLoad];

【问题讨论】:

栏的哪个部分没有显示?是不是整个视图都移出了屏幕? @Nicholas S 是的,没错。 "在部署标签栏界面时,您必须将此视图安装为窗口的根。与其他视图控制器不同,标签栏界面永远不应安装为另一个视图控制器的子级。"来源developer.apple.com/library/ios/#documentation/UIKit/Reference/… 我的意思是在里面有一个 UINavigationController 和一个 UITabBarController,而不是我怎么做(反过来)? @Howey-Ya-Doing 不,一般的做法是拥有标签栏控制器并将导航控制器设置为它的栏控制器。 【参考方案1】:

这不是一个好习惯:

[viewController1.view addSubview:viewController2.view];

失去了 MVC 设计的重点。视图控制器应该(从模型中)获取您的数据并将其放入视图中。如果您有多个视图,只需安排视图的功能以接受相应的数据。

因此,如果您需要一个标签栏控制器,您应该执行以下操作:

// assuming you are in the same initial controller
UITabBarController* pTabBarControllerL = [[UITabBarController alloc] init];
MyFirstController* pFirstControllerL = [[MyFirstController alloc] init];
[pTabBarControllerL setViewControllers:[NSArray arrayWithObject:pFirstControllerL]];
// perhaps set more tab bar controller properties - button images and so on
[self presentModalViewController:pTabBarControllerL animated:YES];
// release the memory you do not need

-(void)viewDidLoad 
    // do your work in pFirstControllerL

PS:你不应该继承 UINavigationController 和 UITabBarController。

【讨论】:

【参考方案2】:

其实根据苹果的建议,UITabBarViewController 应该是 UIWindow 层次结构中的根。我们很难将 TabBar VC 或 Navigation VC 放到根目录下。

【讨论】:

以上是关于UITabBarController 仅显示其 UITabBar 的一半(屏幕外)的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarController 未显示其内容的所有大小(UIViewController)

以编程方式创建的 iOS UITabBarController 未显示其“更多”导航控制器

iOS:为啥自定义标签栏项目仅显示为灰色轮廓?

如何更新 UITabbarController 中的默认徽章 UI 外观?

无法让辅助 UITableViewController 在 UITabBarController 中显示

如何在特定索引处显示 UITabBarController?