Objective c 什么';这是';右';超级视图如何调整其子视图的大小?

Objective c 什么';这是';右';超级视图如何调整其子视图的大小?,objective-c,cocoa-touch,Objective C,Cocoa Touch,我刚开始参与一个iOS项目,并注意到这种反复出现的模式: // This takes place in the superview // This is the first access of subviewController.view, // so the subview controller will create its view // Then we'll immediately resize it to our desired frame subviewController.view

我刚开始参与一个iOS项目,并注意到这种反复出现的模式:

// This takes place in the superview
// This is the first access of subviewController.view,
// so the subview controller will create its view
// Then we'll immediately resize it to our desired frame
subviewController.view.frame = CGMakeRect(x, y, width, height);
对于我来说,子视图的控制器创建具有特定帧大小的子视图,却让superview立即调整其大小,这似乎有些奇怪/低效

是否有其他一些我缺少的设计模式允许superview从一开始就将所需的大小传递给子视图,因此不需要立即调整大小


显然,子视图控制器上可以有一个特殊的方法,将大小作为一个参数,但我想知道这是否是一个犹太/普通模式。

在任何地方创建子视图,而不是使用
init
方法创建,您总是可以使用
initWithFrame
创建。顺便说一句,我们是在谈论控制器的主视图吗?然后,在编译项目之前,始终可以从interface builder设置视图大小


但是,如果应用程序需要在每次启动时动态更改子视图,则当前的更改方式是唯一的选择。

子视图已经在使用initWithFrame。问题是它不知道它的大小;只有superview知道。这些视图是以编程方式创建的,因此界面生成器不在图中。并且,您在CGMakeRect()中传递的属性是静态定义的,或者每次启动都会更改?它是动态的。但是,还有其他方法可以做到这一点。毕竟,我的子视图控制器对象可以有一个特殊的方法,它将所需的大小作为输入,而不是依赖子视图控制器.view访问器来创建视图。然而,考虑到这不是UIViewController上的标准方法,我的假设是设置帧然后立即重置它实际上不是一个重要的性能或代码清洁考虑因素。只是想验证一下。好吧,有时候这取决于试着换一种方式,看看是否有任何副作用。正如您所提到的,您刚刚加入了这个项目,因此请检查文档中是否提到任何警告,以及他们为什么需要这样做的理由。如果没有正当理由,另一种方法是可行的!那么您就100%正确了,设置视图大小,然后调整大小对性能没有好处。