使用initWithFrame进行自动布局?

时间:2013-07-17 12:45:50

标签: ios autolayout

如果我在iOS中以编程方式实现AutoLayout,那么使用initWithFrame方法是否正确?如果不是如何初始化首选大小的视图?

3 个答案:

答案 0 :(得分:3)

除非您别无选择,否则最好避免initWithFrame。使用自动布局,方法是定义两个指定宽度和高度的约束。有不同的方法可以执行此操作,但如果您以编程方式,视图控制器的updateViewConstraints方法或视图的updateConstraints方法执行此操作,请检查是否已创建约束以及是否已创建约束不,将它们添加到您的视图中。

E.g。

[myConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_mySubView]-(200)-|"
                                 options:0
                                 metrics:nil
                                 views:_myViewsDictionary]];

[myConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_mySubView(100)]-|"
                                 options:0
                                 metrics:nil
                                 views:_myViewsDictionary]];

那就是说,使用Interface Builder更好。一旦你习惯了它 - 它确实需要一些习惯 - 你会发现它是一个梦幻般的节省时间,并且比在代码中定义约束要好得多。

答案 1 :(得分:0)

Why not just: myView=[UIView new];

It is the same than myView=[[UIView alloc] init]; It will work in your case if after that at some point you add required constraints.

答案 2 :(得分:0)

override init(frame: CGRect) {
    super.init(frame: frame)
    NSBundle.mainBundle().loadNibNamed("YourView", owner: self, options: nil)
    self.containerView.frame = CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame))
    self.addSubview(self.containerView)
}

这就是我现在所做的。我使用一些遗留代码,有时我将所有内容转换为使用autolayout都很费时间。同样,正如@Max MacLeod所述,除非你别无选择,否则不要使用它。