12

iOS で AutoLayout をプログラムで実装している場合、initWithFrame メソッドを使用するのは適切ですか? そうでない場合、優先サイズのビューを初期化する方法は?

4

3 に答える 3

2

やむを得ない場合を除き、避けたほうがよいinitWithFrameでしょう。自動レイアウトでは、アプローチは、幅と高さを指定する 2 つの制約を定義することです。これを行うにはさまざまな方法がありますが、プログラムで行う場合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

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.

于 2015-11-12T12:02:22.247 に答える
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 に答える