如果我在 iOS 中以编程方式实现 AutoLayout 是否适合使用 initWithFrame 方法?如果不是如何初始化首选大小的视图?
问问题
3742 次
3 回答
2
initWithFrame
除非你别无选择,否则最好避免。使用自动布局,方法是定义两个指定宽度和高度的约束。有不同的方法可以做到这一点,但如果您以编程方式执行此操作,请在updateViewConstraints
视图控制器的方法或视图的updateConstraints
方法中检查约束是否已经创建,如果没有,请将它们添加到您的视图中。
例如
[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。一旦你习惯了它——它确实需要一些时间来适应——你会发现它非常节省时间,而且比在代码中定义约束要好得多。
于 2013-09-06T11:44:33.170 回答
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)
}
这就是我现在所做的。我使用一些遗留代码,有时将所有内容转换为使用自动布局对我来说非常耗时。同样,正如@Max MacLeod 所说,除非您别无选择,否则不要使用它。
于 2016-01-15T02:13:57.777 回答
0
为什么不只是:myView=[UIView new];
它与 myView=[[UIView alloc] init]; 相同 如果在那之后您添加了所需的约束,它将适用于您的情况。
于 2015-11-12T12:02:22.247 回答