在UIViewController的loadView中使用什么尺寸?

时间:2012-10-03 20:31:31

标签: iphone objective-c ios cocoa-touch ios6

我的容器UIViewController将在其视图层次结构中添加另一个CustomViewController的视图。它首先创建控制器,然后调整其视图大小,最后将其添加到视图中。

    //create the controller
    customController = [[CustomViewController alloc] initWithNibName:nil bundle:nil];
    [customController willMoveToParentViewController:self];
    [self addChildViewController:customController];
    [customController didMoveToParentViewController:self];

    //size and position the controller's view 
    customController.view.frame = CGRectMake(10, 10, 100, 50);

    //add the new controller's view
    [self.view addSubview:customController.view];
    [customController didMoveToParentViewController:self];

重新调整大小的部分是我的问题。

CustomViewController以编程方式在loadView中创建其视图,其中添加了许多子视图。由于CustomViewController并不真正知道它的视图最终会如何调整大小/定位,因此它只使用init进行初始化(不提供帧)。

这适用于简单的UIView,但只要我添加子视图,我就有问题。将这些子视图放在`loadView'中将不会真正起作用,因为框架是CGRectZero。此外,一旦我设置了自动调整遮罩以确保其正确缩放,最终结果是所有子视图都会占据整个视图。可能是因为子视图的坐标都是视图框架的100%(因为视图的框架是CGRectZero)。

简而言之,我应该在loadView中使用什么尺寸的框架?我应该假设一个典型的视图大小,我期望视图占用?或者是否有更好的方法允许我添加子视图但是推迟控制器视图的大小调整?

2 个答案:

答案 0 :(得分:1)

UIViewController的视图在viewWillAppear方法(UIViewController的生命周期的方法)中具有实际大小。所以你可以继承UIViewController类并在那里布局子视图。

但是,我想给你一些推荐。 您应该使用视图控制器的loadView方法来创建它的视图。 否则,您可能会遇到内存管理问题和视图布局问题。 在init方法中调用视图属性不是很好主意,因为它会自动调用UIViewController的loadView方法。

阅读有关UIViewController生命周期的更多信息。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

我的建议: 使用父UIViewController的loadView创建它的视图。 viewWillAppear中的布局视图。

祝你好运!如果您有任何疑问,请咨询更多:)

答案 1 :(得分:0)

您可以为子视图设置与其超级视图相关的帧。喜欢

subview.frame = CGPointMake(self.view.frame.size.width *0.2,  self.view.frame.size.height *0.2, self.view.frame.size.width *0.8, self.view.frame.size.height *0.8);