7

視覚的なフォーマット文字列を使用bする際に左右のスペースを均等に分配することは可能ですか?@"|-[a(5)]-[b(8)]-[c(5)]-|"

4

2 に答える 2

15

Apple のAuto Layout Guideでは、「スペーサー ビュー」の使用が推奨されています。水平方向に等間隔で 3 つのビューをレイアウトするためのソリューションを次に示します。

// create views dictionary
NSMutableDictionary *viewsDictionary = [NSMutableDictionary dictionary];
[viewsDictionary addEntriesFromDictionary:NSDictionaryOfVariableBindings(viewA, viewB, viewC)];

// create 4 spacer views
for (int i = 0; i < 4; i++) {
    UIView *spacerView = [[UIView alloc] init];
    spacerView.hidden = YES;
    [self addSubview:spacerView];
    [viewsDictionary setObject:spacerView
                        forKey:[NSString stringWithFormat:@"spacer%d", i + 1]];
}

// disable translatesAutoresizingMaskIntoConstraints in views for auto layout
[viewsDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) 
{
    [obj setTranslatesAutoresizingMaskIntoConstraints:NO];
}];

// add constraints
[superview addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:
  @"|[spacer1(>=0)][viewA][spacer2(==spacer1)][viewB][spacer3(==spacer1)][viewC][spacer4(==spacer1)]|"
                                         options:kNilOptions
                                         metrics:nil
                                           views:viewsDictionary]];

spacer1の幅が 0 より大きい値に設定されていることに注意してください。以降のスペーサー ビューは、 と同じ幅に設定されますspacer1

于 2013-10-05T05:04:27.337 に答える