Ios 如果我没有';如果不想使用nib文件,loadView的正确实现是什么,可以正确调整根视图的大小?

Ios 如果我没有';如果不想使用nib文件,loadView的正确实现是什么,可以正确调整根视图的大小?,ios,uiviewcontroller,Ios,Uiviewcontroller,这里有一大堆相关的问题,但没有一个是简洁或正确的答案。情况如下: 我正在创建一个新的ViewController,不想使用nib文件。我从的理解是,如果我不想使用nib,我应该实现loadView来手动创建自己的视图层次结构 但是,我不清楚应该如何用适当的边界正确地实例化self.view(鉴于此视图控制器可能在许多不同的情况下使用,仅将其设置为屏幕边界感觉不正确) 不知何故,默认的UIViewController loadView似乎确实正确地启动了帧大小,但不清楚我是否正在编写自己的版本,我

这里有一大堆相关的问题,但没有一个是简洁或正确的答案。情况如下:

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

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


不知何故,默认的UIViewController loadView似乎确实正确地启动了帧大小,但不清楚我是否正在编写自己的版本,我应该如何执行此操作。

无需实现
loadView
。相反,实现
viewDidLoad
,创建并添加所需的任意和所有子视图。只需将它们添加到默认的
self.view

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

- (void)viewDidLoad {
    [super viewDidLoad];

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

在loadView中,您应该设置viewController的view属性,而不设置其他属性。应在viewDidLoad中添加子视图

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

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

这似乎可行,这也是我过去所做的,但似乎与苹果在UIViewController文档页面中所说的相反,尤其是:如果无法在序列图像板或nib文件中定义视图,请重写loadView方法以手动实例化视图层次结构并将其指定给view属性。“如果你愿意,你可以这样做。您需要覆盖
loadView
的唯一原因是,如果您希望视图控制器的根视图是一个特定视图,而不是某个空视图。我听到您说“需要”,我只是想找出正确的方法来实现这一点,从文档中可以看出,正确的方法是实例化视图层次结构(我理解为不仅仅是指根视图,而是指我的所有子视图)在loadView中。我不怀疑你的建议是否有效,只是文档似乎没有这么做。文档是否错误?我是否误解了它们?我已经编写了数百个视图控制器,全部都是代码。没有一个实现了“loadView”。所有这些都在“viewDidLoad”中创建了视图层次结构。它们都工作正常。好的,文档你错了是个很好的答案。这不是第一次了