在iPad应用程序中,我正在以FormSheet样式显示模态视图控制器(通过presentModalViewController
)(因此它大约540像素宽和高),根视图控制器显示正常(其框架的大小已设置)大致(540,540),我的代码负责正确布局内容。
但是,当推送一个视图控制器时,它的帧大小总是有(768,1024),这是错误的。我试着像这样明确地设置它的框架:
DetailViewController* detailController = [[DetailViewController alloc] init];
detailController.view.frame = self.view.frame;
[self.navigationController pushViewController:detailController animated:YES];
为什么它没有正确设置尺寸?
答案 0 :(得分:2)
如果需要运行时视图的实际框架,则应使用layoutSubviews
。我最终使用它将子视图放在控制器的视图中。 (虽然我必须为控制器的视图创建一个自定义的UIView
子类)
答案 1 :(得分:1)
你的方法看起来正确。请原谅我的问题,但您是否使用断点和GDB进行了调试?
您可以从控制台尝试此操作(cmd shift r):
print [[self view] frame]
和
print [[detailController view] frame]
在调用pushViewController之前和之后打印它:在UINavigationController上设置动画,以查看它的帧大小是否从pushViewController:animated method更改。
另一个注意事项,很难看到用于将视图控制器推送到UINavigationController的用例,该UINavigationController不会占用整个UINavigationController的视图区域。每次推送到导航控制器都代表了某种导航的更深层次(与UIView - addSubView不同)。
在显示之前,视图会自动调整大小以适合导航栏和工具栏(如果存在)。
你会在我提供的链接上找到关于apple的文档。请参阅pushViewController:animated:
答案 2 :(得分:-1)
预计视图控制器将管理整个“屏幕”内容。在任何给定时刻,只有一个视图控制器(不计算容器控制器,如UINavigationController)处于活动状态。唯一的例外是UISplitViewController,它允许两个视图控制器同时在屏幕上显示内容。