Ios 视图控制器框架设置的建议模式?
我在iOS dev中多次遇到以下操作序列,但始终不知道建议的实现模式是什么: 1) 视图控制器A创建新的视图控制器B 2) A设置B视图的框架 3) B然后创建自己的子视图,该子视图需要相对于自己视图的框架调整大小 请注意,这假设B无法计算出自己的帧,它需要从更高阶的VC设置Ios 视图控制器框架设置的建议模式?,ios,cocoa-touch,design-patterns,Ios,Cocoa Touch,Design Patterns,我在iOS dev中多次遇到以下操作序列,但始终不知道建议的实现模式是什么: 1) 视图控制器A创建新的视图控制器B 2) A设置B视图的框架 3) B然后创建自己的子视图,该子视图需要相对于自己视图的框架调整大小 请注意,这假设B无法计算出自己的帧,它需要从更高阶的VC设置 因此,考虑到以下代码: b = CustomViewController() b.frame = CGRectMake(...) 人们会发现,如果他们试图在B的viewDidLoad中引用self.frame,则该框架
因此,考虑到以下代码:
b = CustomViewController()
b.frame = CGRectMake(...)
人们会发现,如果他们试图在B的viewDidLoad
中引用self.frame
,则该框架还不可用。因此,这种方法失败了。可以向B添加新方法,如createViews
或其他方法,甚至可以利用layoutSubviews
,但这两种方法都是笨拙的或可能不正确的选择
我尝试过的另一种方法是制作一个与initWithFrame相当的自定义初始值设定项,然后将新视图创建放在init中,虽然这样做有效,但它似乎与苹果的Cocoa基本设置相反,其中UIViews具有initWithFrame,UIViewController仅具有init或initWithNibName
这里推荐的模式是什么?推荐的模式是使用自动布局。这根本不能解决这种情况……是的,它可以。您关心的是谁应该设置彼此的框架(在autolayout中,框架不应该是任何人),更重要的是,您关心的是如何处理B的子视图。如果B的子视图使用自动布局,则设置B的视图框架的人、方式或时间无关紧要(同样,应该由您添加的自动布局约束来处理)因为B的子视图的自动布局约束将始终自我调整以正确适应B。并且A和B之间的自动布局关系应设置在B添加到A的位置。步骤2应为“A设置B的自动布局约束”(这意味着A在B的最上面的视图和它添加了B的A的任何视图之间定义了约束)。您的步骤3应该是“B没有更多的事情要做,因为它的自动布局约束已经在interface builder中设置,或者我曾经以编程方式将它的子视图添加到它自己的位置”。