4

我不熟悉 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 在显示之前是如何处理它的 view frame 属性的?我在哪里可以找到有用的文档。

谢谢你。


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

4

1 回答 1

6

你错了——你真的需要阅读(并理解)苹果的UIViewController文档:

查看控制器目录

查看控制器编程指南

查看控制器参考

如果您在代码中为视图控制器创建视图,则应该在视图控制器的loadView方法中进行。

直接来自 Apple 的文档:

以编程方式创建视图

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

创建一个根视图对象。根视图包含与您的视图控制器关联的所有其他视图。您通常会为此视图定义框架以匹配应用程序窗口的大小,而应用程序窗口本身应填满屏幕。但是,框架会根据视图控制器的显示方式进行调整。请参阅“视图控制器视图大小调整”。</p>

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

创建额外的子视图并将它们添加到根视图。对于每个视图,您应该执行以下操作:

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

于 2012-05-30T16:30:59.150 回答