10

ビジュアル フォーマット言語を使用して、Autolayout のビューに上下のパディングを設定しようとしています。パディングをビジュアルフォーマット文字列の整数として記述した場合、コードはコンパイルされて機能しますが、定数に置き換えようとすると失敗します。これが私が得ているエラーです:

キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '制約形式を解析できません: ビューの幅または高さに等しいスペースを設定することはできません。おそらく、ビューをスペーサーとして使用したいですか? [view1][spacer(==view1)][view2] V:|-kTopAndBottomPadding-[messageTextView]-kTopAndBottomPadding-|

そして、これが私のコードです。

CGFloat const SPMTVC_kTopAndBottomPadding = 5.0;
// ...

// Create my own NSDictionary of variable bindings.
NSDictionary *variableBindings = @{@"messageTextView" : _messageTextView,
    @"contentView" : self.contentView,
    @"kTopAndBottomPadding" : [NSNumber numberWithFloat:SPMTVC_kTopAndBottomPadding]};

// Constraints in the horizontal axis.
// Basically just pins the view to the left and right of superview.
NSMutableArray *constraints = [[NSLayoutConstraint
    constraintsWithVisualFormat:@"H:|-0-[messageTextView(==contentView)]-0-|"
    options:NSLayoutFormatAlignAllLeading
    metrics:nil
    views:variableBindings] mutableCopy];

// Constraints in vertical axis, give 5-point padding from superview's top & bottom.
[constraints addObjectsFromArray:[NSLayoutConstraint
    constraintsWithVisualFormat:@"V:|-kTopAndBottomPadding-[messageTextView]-kTopAndBottomPadding-|"
    options:NSLayoutFormatAlignAllTop
    metrics:nil
    views:variableBindings]];

for (NSLayoutConstraint *constraint in constraints) {
    [self.contentView addConstraint:constraint];
}

エラーメッセージは、辞書で定義されているように、コンパイラがkTopAndBottomPaddingであると考えていることを意味していると思います。これを正しく行う方法はありますか?UIViewNSNumber

4

2 に答える 2