Iphone 推式UIViewController';s的视图始终与全屏一样大

Iphone 推式UIViewController';s的视图始终与全屏一样大,iphone,cocoa-touch,ios,uikit,Iphone,Cocoa Touch,Ios,Uikit,在一个iPad应用程序中,我以表单样式(大约540像素宽和高)显示一个模态视图控制器(通过presentModalViewController),根视图控制器显示良好(其帧大小设置为大致(540540,540),我的代码负责正确布局内容) 但是,当推送视图控制器时,其帧的大小始终为(768,1024),这是错误的。我试图明确地将其框架设置为这样: DetailViewController* detailController = [[DetailViewController alloc] init

在一个iPad应用程序中,我以表单样式(大约540像素宽和高)显示一个模态视图控制器(通过
presentModalViewController
),根视图控制器显示良好(其帧大小设置为大致(540540,540),我的代码负责正确布局内容)

但是,当推送视图控制器时,其帧的大小始终为(768,1024),这是错误的。我试图明确地将其框架设置为这样:

DetailViewController* detailController = [[DetailViewController alloc] init];
detailController.view.frame = self.view.frame;          
[self.navigationController pushViewController:detailController animated:YES];

你知道为什么不能正确设置大小吗?

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

您的方法看起来不错。请原谅我的问题,但是你已经用断点和GDB调试过了吗

您可以从控制台(cmd shift r)尝试此操作:

在调用UINavigationController上的pushViewController:animated之前和之后打印此内容,以查看其帧大小是否与pushViewController:animated方法不同

另一个注意事项是,很难看到将视图控制器推送到不会占用整个UINavigationController视图区域的UINavigationController的用例。每次推到导航控制器上都代表深入某个导航的级别(与UIView-addSubView不同)

更新:这就是您遇到问题的原因: 视图在显示之前会自动调整大小,以适应导航栏和工具栏(如果存在)之间的大小


你可以在苹果的文档中找到我提供的链接。请参见pushViewController:animated:

如果需要运行时视图的实际帧,则应使用
布局子视图。我最终使用它将子视图放置在控制器的视图中。(尽管我必须为控制器的视图创建一个自定义的
UIView
子类)

您现在演示的视图控制器是UINavigationViewController吗?还请注意,表格为540x620。
print [[self view] frame]
print [[detailController view] frame]