2

我的容器将在其视图层次结构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 来说效果很好,但是一旦我添加了子视图,我就会遇到问题。由于框架是 CGRectZero,因此将这些子视图放置在“loadView”中不会真正起作用。此外,一旦我设置了自动调整大小的蒙版以确保它正确缩放,最终结果是所有子视图都增长到占据整个视图。可能是因为子视图的坐标都是视图框架的100%(因为视图的框架是CGRectZero)。

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

4

2 回答 2

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 中的布局视图。

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

于 2012-10-03T21:04:03.307 回答
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);
于 2012-10-03T20:51:38.567 回答