当我正在初步设置UIView
的子视图时,如果我初始化UIView
:
//Listing A
UIView *redBox = [[UIView alloc] init];
[redBox setBackgroundColor:[UIColor redColor]];
[self.view addSubview:redBox];
[redBox setTranslatesAutoresizingMaskIntoConstraints:NO];
我想以编程方式将Auto Layout约束应用于它:
//Listing B
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[redBox(100)]" options:0 metrics:nil views:@{@"redBox": redBox}];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[redBox(100)]" options:0 metrics:nil views:@{@"redBox": redBox}];
[self.view addConstraints:constraints];
清单B应该去哪里?
是否应该立即跟随清单A?
或者,如果我们在UIView
子类中,它应该进入:
updateConstraints
initWithFrame
或layoutSubviews
?同样,如果我们在UIViewController
子类中,并且我将列表A放在viewDidLoad
中,那么列表B应该立即跟随它还是应该进入:
initWithNibName:bundle:
viewWillLayoutSubviews
或updateViewConstraints
?答案 0 :(得分:1)
我经常把它全部放在一个名为setUpConstraints
的方法(或一系列方法)或类似的东西中。
然后我从viewDidLoad
调用该方法。
如果您是在UIView
中进行的,那么我会使用setupConstraints
方法和init
来调用我的awakeFromNib
方法。
已经说过为此目的已经为您提供了updateViewConstraints
方法,因此您可以从那里调用setupConstraints
方法。
答案 1 :(得分:-1)
viewDidLoad
是应用自定义布局的最佳位置,因为它在初始化时不会与xib约束冲突!