我在iOS开发中多次遇到以下操作序列,并且从未完全知道建议的模式是用于实现的:
1)视图控制器 A 创建一个新的视图控制器 B
2) A 设置 B 视图的框架
3) B 然后创建自己的子视图,需要相对于自己视图的框架进行大小调整
请注意,这假设 B 无法找出自己的帧,需要从更高阶的VC设置。
所以,给出以下代码:
b = CustomViewController()
b.frame = CGRectMake(...)
如果他们尝试在 B 的self.frame
内引用viewDidLoad
,则会发现该框架尚未提供。所以这种方法失败了。可以将新方法添加到 B ,例如createViews
或其他内容,甚至可以利用layoutSubviews
,但这两种方法都是笨拙或可能不正确的选择。
我尝试过的另一种方法是创建一个等同于initWithFrame
的自定义初始化程序,然后将新视图创建权放在init中,虽然这样做,但它似乎与Apple的Cocoa基本设置相反,其中UIViews有initWithFrame,而UIViewControllers只有init或initWithNibName。
这里推荐的模式是什么?