3

ビジュアルフォーマット言語を使用したコードの自動レイアウトを使用して、ビューemptyAddButtonを左下に配置したいと思います。これが私の現在のアプローチです。

ボタンemptyAddButton、カスタムUIViewControllerの初期化:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
        emptyAddButton = [[AddCardViewController alloc] init];
        [emptyAddButton.view setFrame:CGRectMake(50, 300, 190, 65)]; //to define width + height. x, y is random and should be overwritten by auto auto layout
        [self addChildViewController:emptyAddButton];
        [emptyAddButton.view setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.view addSubview:emptyAddButton.view];
...
}

左下の位置に自動レイアウトを割り当てる+パディング(10)

-(void)viewWillAppear:(BOOL)animated{
...
    NSDictionary *viewToLayout = [NSDictionary dictionaryWithObject:emptyAddButton.view forKey:@"emptyAddButton"];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(10)-[emptyAddButton]"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:viewToLayout]];

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:[emptyAddButton]-(10)-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:viewToLayout]];
...
}

現在、emptyAddButtonはまったく表示されません。

ビューを正しく配置する方法はありますか?

4

1 に答える 1

3

フレームを設定したり、自動サイズ変更マスクをオフにしたり、制約を追加したりすることはできません。フレームが破棄され、幅と高さがゼロに再計算されます。これは、ViewControllerのサブビューからログアウトすることで確認できます。

VFL文字列にもサイズを追加します。

"H:|-(10)-[emptyAddButton(==190)]"

垂直方向の制約についても同じです。

余談ですが、ビューの作成と制約の設定を分割することにメリットはありません。すべてを一度に実行します(viewDidLoadで実行します)。現時点では、ビューが表示されるたびに制約を再作成しています。

于 2013-03-03T22:23:32.363 に答える