4

label という名前のスーパークラスのインスタンス変数があり、ビジュアル形式を使用して自動レイアウト制約を設定したいとします。フォーマット文字列で self.label を使用しようとすると、解析エラーが発生し、サブクラスから _label にアクセスできません。現在動作している回避策は以下のとおりですが、ちょっと見栄えが悪いようです。より良い方法はありますか?

    UILabel *label = self.label;
    NSDictionary *views = NSDictionaryOfVariableBindings(label, _textField);

    [self.contentView addConstraints:
     [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label(==_textField)][_textField(==label)]-|"
                                             options:NSLayoutFormatAlignAllCenterY
                                             metrics:nil
                                               views:views]];
4

1 に答える 1

9

constraintsWIthVisualFormatビュー ディクショナリを使用しますが、NSDictionaryOfVariableBindings 次の例から取得する必要はありません。

UILabel *label = self.label;
NSDictionary *views = @{@"label":self.label, @"_textField":_textField};

[self.contentView addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label(==_textField)][_textField(==label)]-|"
                                         options:NSLayoutFormatAlignAllCenterY
                                         metrics:nil
                                           views:views]];

私はそれをテストしていないので、順序や構文が間違っている場合はお知らせください。修正できますが、ポイントは辞書が任意である可能性があることです。

于 2013-06-13T20:24:33.360 に答える