12

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

4

3 回答 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 回答