Trả lời

13

No.

Tuy nhiên, bạn có thể làm điều đó với định dạng trực quan và tạo ràng buộc thủ công. Thay đổi chuỗi VFL của bạn thành:

@"|-[a(5)]->=0-[b(8)]->=0-[c(5)]-|" 

Điều này nói rằng bạn không quá quan tâm đến kích thước thực tế của khoảng cách giữa a và b, và b và c.

Bây giờ, hãy tạo một ràng buộc ghim trung tâm của b vào giữa của người giám sát bằng cách sử dụng constraintWithItem:... (Tôi đang nhập số này trên điện thoại để tha thứ cho tôi vì không viết chính tả toàn bộ phương thức).

Điều này, cùng với khoảng cách linh hoạt của bạn, sẽ cung cấp cả khoảng trống ở bên trái và bên phải của b.

+0

Âm thanh này tuyệt quá. Tôi sẽ cho nó một shot. Cảm ơn! – flohei

+0

Hoạt động rất tốt. Quá dễ. Cảm ơn! :-) – flohei

+0

Làm thế nào chính xác bạn đã "ghim trung tâm của b đến trung tâm của người giám sát", @flohei? Và không thể sử dụng định dạng trực quan cho điều đó hay phải sử dụng định nghĩa 'constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant:'? –

15

Apple Auto Layout Guide đề xuất sử dụng "chế độ xem spacer". Đây là giải pháp cho đẻ ra ba quan điểm của bạn với khoảng cách bằng chiều ngang:

// 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]]; 

Lưu ý rằng chiều rộng spacer1 's được thiết lập để có nhiều hơn 0. xem spacer sau đó được thiết lập để có độ rộng bình đẳng với spacer1.

+0

Có lý do nào khiến bạn không chỉ đơn giản là viết các quan điểm 'NSDictionary * = NSDictionaryOfVariableBindings (xemA, viewB, viewC);'? –

+0

Tôi đã chỉnh sửa câu trả lời của mình để sử dụng nhiều đối số trong NSDictionaryOfVariableBindings. Tôi đang sử dụng từ điển có thể thay đổi để tôi có thể thêm số lần xem spacer của mình vào đó một cách linh hoạt. –

+0

Ồ, đúng vậy.^___^'NSMutableDictionary * views = NSDictionaryOfVariableBindings (xemA, viewB, viewC) .mutableCopy;' sau đó. –

Các vấn đề liên quan