导航栏下面的框架大小?

21

我正在rootController中手动添加一个UITableView,但是我不知道如何获取其frame大小...

Controller *rootController = [[Controller alloc] init];
UINavigationController *tempNavController = [[UINavigationController alloc] initWithRootViewController:rootController];
[self setNavController:tempNavController];
[tempNavController release];

[window addSubview:[[self navController] view]];
[window makeKeyAndVisible];
我目前正在使用:[[[self navigationController] view] frame],但这没有考虑到“navBar”高度或“statusBar”的高度(给出的是480)。有没有办法获取在状态栏/导航栏下方的框架大小,或者我必须从上面的数字中减去20+44?注意:我使用navigationController.navigationBar.frame.size.height来获取44。

你为什么要手动设置表视图的框架呢?如果你只是把表视图控制器添加到导航控制器的 viewControllers 数组中,表格应该会自动为你适当调整大小,无需设置表视图的框架或边界。 - Ryan
是的,如果您添加表格并启用自动调整大小功能,它应该默认适合。 - gabaum10
1
我添加到UIViewController的不是UITableViewController,而是UITableView。我知道我可以使用UITableViewController,但我只是想尝试不使用它来完成这个任务。 - fuzzygoat
使用UITableViewController代替其他方式,可以避免很多麻烦。系统开发时默认你会将其与UITableViewController一起使用。 - Ryan
@Ryan 如果一个页面有两个UITableView怎么办? - Perisheroy
@Perisheroy:自从引入了子/父视图控制器的概念,您可以为场景中的每个UITableView实例使用UITableViewController。 - Dirty Henry
2个回答

48

您可以尝试减去

[UIApplication sharedApplication].statusBarFrame.size.height

并且

self.navigationController.navigationBar.frame.size.height

从您的

self.window.frame.size.height

祝福您,Rog


如果您没有通过 self.navigationController 直接访问 UINavigationController,是否有一种方法可以访问导航栏? - alexgophermix
1
你尝试过 self.parentViewController.navigationController 吗? - Rog
我正在一个UIView子类库中进行此操作,因此我不确定是否可以访问self.parentViewController属性。但我发现到目前为止适用于所有情况的一件事是,通过((UIView*)self.nextResponder).frame.size;获取UIViewController的高度。我知道它很丑 :| - alexgophermix

2

安全区域布局指南 当视图在屏幕上可见时,此指南反映的是视图未被导航栏、选项卡栏、工具栏和其他祖先视图覆盖的部分。(在tvOS中,安全区域反映的是屏幕边框未覆盖的区域。)如果视图当前未安装在视图层次结构中,或者尚未在屏幕上可见,则布局指南的边缘等于视图的边缘。

因此,您可以使用:

self.safeAreaLayoutGuide.layoutFrame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接