Gav*_*ope 7 uitabbarcontroller ios ios7
我有UITabBarController两个选项卡.每个标签都是一个UITableViewController.
当UITabBarController出现时,这两个选项卡视图中的每个不正确的边界.第一个选项卡正确位于导航栏下方,但延伸到底部的选项卡栏下方.第二个选项卡是另一种方式,从导航栏下方开始,但在底部的选项卡栏之前正确停止.

我正在创建和呈现TabBarController,如下所示:
ActiveListTabBarViewController* listTabBarController = [[ActiveListTabBarViewController alloc] initWithListController:_listController];
UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:listTabBarController];
[self presentViewController:nc animated:YES completion:^(){}];
Run Code Online (Sandbox Code Playgroud)
然后在initTabBarController中,创建并添加子(tab)视图,如下所示:
_todoListViewController = [[BasicTableViewController alloc] initWithList:[_controller itemsToDo]];
_todoListViewController.delegate = self;
_todoListViewController.title = @"To Do";
_completedListViewController = [[BasicTableViewController alloc] initWithList:[_controller itemsDone]];
_completedListViewController.delegate = self;
_completedListViewController.title = @"Completed";
[self setViewControllers:@[_todoListViewController, _completedListViewController]];
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢,加文
更新:按照建议添加以下方法BasicTableViewController:
- (UIRectEdge)edgesForExtendedLayout
{
return UIRectEdgeNone;
}
Run Code Online (Sandbox Code Playgroud)
第一个选项卡的行为已得到改进并且位置正确,但第二个选项卡保持不变.现状如下:

有什么建议?干杯.
问题是由我呈现的方式引起的UITabBarController
ActiveListTabBarViewController* listTabBarController = [[ActiveListTabBarViewController alloc] initWithListController:_listController];\nUINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:listTabBarController];\n[self presentViewController:nc animated:YES completion:^(){}];\nRun Code Online (Sandbox Code Playgroud)\n\n回到 Apple 的文档,我不确定这是否是呈现UITabBarController. 也就是说,将其呈现为另一个视图控制器的子级。
它不是。以下是一些为我证实的片段;由此以及由此产生的更改,我假设像上面那样呈现 TabBarController 是不正确的。
\n\n\n\n\n\n\n\n\n在创建选项卡栏界面之前,您需要决定如何使用选项卡栏界面。由于它对您的数据强加了一种总体组织,因此您应该仅以以下特定方式使用一种组织:
\n\n\n
\n- 直接将其安装为window\xe2\x80\x99s根视图控制器。
\n- 将其安装为分割视图界面中的两个视图控制器之一。(仅限 iPad)
\n- 从另一个视图控制器以模态方式呈现它。
\n- 从弹出窗口显示它。(仅限 iPad)
\n
\n\n\n与其他视图控制器不同,标签栏界面永远不应该安装为另一个视图控制器的子级。
\n
并进一步澄清:
\n\n\n\n\n选项卡栏控制器是一个容器视图控制器,可用于将应用划分为两种或多种不同的操作模式。
\n\n导航控制器呈现按层次结构组织的数据,并且是 UINavigationController 类的实例。此类的方法提供对管理基于堆栈的 内容视图控制器集合的支持。
\n
我之所以将其呈现UITabBarController为导航控制器的根视图,是因为我想要导航栏......
这就是我现在在 TabBarController 的 init 中实现这一目标的方法:
\n\n- (id)initWithListController:(BasicListController *)controller\n{\n self = [super init];\n if (self) {\n _controller = controller;\n\n _todoListViewController = [[BasicTableViewController alloc] initWithList:[_controller itemsToDo]];\n _todoListViewController.delegate = self;\n _todoListViewController.title = @"To Do";\n\n _completedListViewController = [[BasicTableViewController alloc] initWithList:[_controller itemsDone]];\n _completedListViewController.delegate = self;\n _completedListViewController.title = @"Completed";\n\n UINavigationController* ncTodo = [[UINavigationController alloc] initWithRootViewController:_todoListViewController];\n UINavigationController* ncCompleted = [[UINavigationController alloc] initWithRootViewController:_completedListViewController];\n\n [self setViewControllers:@[ncTodo, ncCompleted]];\n\n UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(doneTap:)];\n _todoListViewController.navigationItem.leftBarButtonItem = doneButton;\n _completedListViewController.navigationItem.leftBarButtonItem = doneButton;\n }\n return self;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n注意,我不需要做任何事情:
\n\niOS 7 默认尊重导航栏和标签栏(与上面的原始屏幕截图不同,当时的屏幕截图UITabBarController显示不正确)。
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |