如果我不想使用nib文件,那么正确调整根视图大小的loadView的正确实现是什么?

时间:2013-02-26 20:20:44

标签: ios uiviewcontroller

这里有很多相关的问题,但没有一个感觉像一个简洁或正确的答案。情况如下:

我正在创建一个新的ViewController,并且不想使用nib文件。我对Apple docs的理解是,如果我不想使用nib,我应该实现loadView来手动创建我自己的视图层次结构。

然而,我不清楚我应该如何使用适当的边界正确实例化self.view(鉴于此视图控制器可能在一堆不同的情况下使用,将其设置为屏幕边界感觉不对)

不知何故,默认的UIViewController loadView似乎确实正确地启动了帧大小,但是如果我正在编写自己的版本,那么我不应该这样做。

2 个答案:

答案 0 :(得分:1)

无需实施loadView。而是实施viewDidLoad并创建和添加您想要的任何和所有所需的子视图。只需将它们添加到默认self.view

如果要添加一个填充视图控制器视图的视图,请执行以下操作:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *someView = [[UIView alloc] initWithFrame:self.view.bounds];
    someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:someView];
}

答案 1 :(得分:0)

在loadView中,你应该设置viewController的view属性,而不是其他任何东西。添加子视图应该在viewDidLoad中完成。

- (void)loadView {
    self.view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 80, 40)]; 
}

Roopesh Chander有一篇有趣的博客文章,可以选择哪种策略:loadView vs viewDidLoad for Programmatic UI Setup。他建议在loadView而不是viewDidLoad中设置框架以获得最大效率。