应该在哪里放置AutoLayout代码?

时间:2014-01-20 11:55:21

标签: ios autolayout nslayoutconstraint

当我正在初步设置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

2 个答案:

答案 0 :(得分:1)

我经常把它全部放在一个名为setUpConstraints的方法(或一系列方法)或类似的东西中。

然后我从viewDidLoad调用该方法。

如果您是在UIView中进行的,那么我会使用setupConstraints方法和init来调用我的awakeFromNib方法。

已经说过为此目的已经为您提供了updateViewConstraints方法,因此您可以从那里调用setupConstraints方法。

答案 1 :(得分:-1)

viewDidLoad是应用自定义布局的最佳位置,因为它在初始化时不会与xib约束冲突!