iOS在展示UIViewController之前如何设置其视图框架?

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如何处理其视图框架属性?我该从哪里找到有用的文档?
谢谢。
更新:实际上,这段代码来自cocos2d-iphone DirectorTest:https://github.com/cocos2d/cocos2d-iphone/blob/release-2.0-rc1/tests/DirectorTest.m#L143

1
你确定你看不到下面的导航控制器视图吗?你尝试设置自定义背景颜色了吗?此外,你的导航有问题。如果这段代码在视图控制器中,请使用 self.navigationController 来访问导航控制器,并将新的视图控制器推到其顶部。 - Eimantas
@Eimantas 我更新了,这段代码来自于cocos2d的测试,它可以正常运行,视图显示为全屏,即使它的框架被设置为(0, 0, 160, 240)。 - qichunren
这段代码只是一个糟糕编写的测试案例,不应在实际应用中使用。但请注意,视图框架可能会根据自动调整大小掩码而更改。 - Felix
1个回答

6
你的理解有误 - 你需要阅读(并理解)苹果的UIViewController文档:
View Controller目录
View Controller编程指南
View Controller参考
如果你要为视图控制器创建代码视图,应该在视图控制器的loadView方法中执行。
直接来自苹果的文件:

程序化创建视图

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

创建根视图对象。根视图包含与视图控制器相关联的所有其他视图。通常将此视图的框架定义为与应用程序窗口的大小相同,而应用程序窗口本身应填充屏幕。但是,框架会根据视图控制器的显示方式进行调整。请参见“视图控制器视图调整大小”。

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

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

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


谢谢。但是你能解释一下这段代码吗:https://github.com/cocos2d/cocos2d-iphone/blob/release-2.0-rc1/tests/DirectorTest.m#L143 它没有使用loadView方法,而是将一个视图分配给控制器。为什么它能工作? - qichunren
3
他们也不知道自己在做什么吗? - Ashley Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接