推送UIViewController的视图始终与全屏一样大

时间:2011-03-10 17:15:40

标签: iphone cocoa-touch ios uikit

在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];

为什么它没有正确设置尺寸?

3 个答案:

答案 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不同)。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

更新:这就是您遇到问题的原因:

  

在显示之前,视图会自动调整大小以适合导航栏和工具栏(如果存在)。

你会在我提供的链接上找到关于apple的文档。请参阅pushViewController:animated:

答案 2 :(得分:-1)

预计视图控制器将管理整个“屏幕”内容。在任何给定时刻,只有一个视图控制器(不计算容器控制器,如UINavigationController)处于活动状态。唯一的例外是UISplitViewController,它允许两个视图控制器同时在屏幕上显示内容。