如果我在iOS中以编程方式实现AutoLayout,那么使用initWithFrame方法是否正确?如果不是如何初始化首选大小的视图?
答案 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所述,除非你别无选择,否则不要使用它。