iOS如何在显示之前设置UIViewController的视图框架?

时间:2012-05-30 16:05:56

标签: ios uiview uiviewcontroller

我不熟悉iOS UIViewController的详细工具。我有以下代码来创建一个新的UIViewController并显示它,但我在 initWithFrame 方法中设置的帧不起作用,控制器的视图始终是全屏(320 * 480)。

UIViewController *viewController = [[UIViewController alloc] init];

// view
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 140, 130)];
viewController.view = view;
[view release];
AppController *app = (AppController*)[[UIApplication sharedApplication] delegate];

UINavigationController *nav = [app navController];
[nav pushViewController:viewController animated:YES];
 [viewController release];

我在苹果开发者文档中搜索了相关的想法,但我发现没有什么用处。在显示之前,UIViewController是如何处理其视图框架属性的?我在哪里可以找到有用的文档。

谢谢。


更新:事实上,代码来自cocos2d-iphone DirectorTest:https://github.com/cocos2d/cocos2d-iphone/blob/release-2.0-rc1/tests/DirectorTest.m#L143

1 个答案:

答案 0 :(得分:5)

你错了 - 你真的需要阅读(并理解)Apple的UIViewController文档:

View Controller Catalog

View Controller Programming Guide

View Controller Reference

如果您要在视图控制器的代码中创建视图,则应该在视图控制器的loadView方法中执行此操作。

直接来自Apple的文档:

  

以编程方式创建视图

     

如果您更喜欢以编程方式创建视图...     您可以通过覆盖视图控制器的loadView来实现   方法 即可。您对此方法的实现应执行以下操作:

     

创建根视图对象。根视图包含所有其他视图   与视图控制器关联。您通常定义框架   此视图与应用程序窗口的大小相匹配,这本身应该是   填满屏幕。但是,框架会根据您的视图进行调整   显示控制器。请参阅“查看控制器视图调整大小。”

     

您可以使用通用UIView对象,您定义的自定义视图或任何   可以缩放以填充屏幕的其他视图。

     

创建其他子视图并将其添加到根视图中。对于每一个   查看,您应该执行以下操作:

     

创建并初始化视图。对于系统视图,通常使用   initWithFrame:方法指定的初始大小和位置   风景。使用addSubview:方法将视图添加到父视图。   将根视图分配给视图控制器的view属性。