2013-07-21 31 views
5

Ví dụ, nhãn A, B và C. Label Một nên có chiều rộng của bất cứ rộng, B hoặc C.Làm cách nào để thêm một ràng buộc sao cho chế độ xem rộng bằng hai chế độ xem khác?

Nhìn bề ngoài, một cái gì đó dọc theo dòng của

@"H:[viewA(==MAX(viewB,viewC))]" 
+0

bản sao có thể có của [Độ cao tự động bằng MAX (chiều cao nhiều lượt xem)] (http://stackoverflow.com/questions/17117799/autolayout-height-equal-to-maxmultiple-view-heights) –

Trả lời

1

Nếu bạn muốn đảm bảo rằng viewA đồng thời ít nhất là rộng như cả viewBviewC, sau đó sử dụng hai câu lệnh VFL riêng biệt, @"H:[viewA(>=viewB)]"@"H:[viewA(>=viewC)]".

Nếu bạn cũng muốn đảm bảo rằng A sẽ không được rộng hơn so với chiều rộng tối đa của viewB và/hoặc viewC, bạn sẽ xác định một hạn chế không bắt buộc (tức là ưu tiên thấp hơn UILayoutPriorityRequired) cho chiều rộng của viewA là tương đương với một trong số họ, ví dụ:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:viewA 
                   attribute:NSLayoutAttributeWidth 
                   relatedBy:NSLayoutRelationEqual 
                   toItem:viewB 
                   attribute:NSLayoutAttributeWidth 
                  multiplier:1.0 
                   constant:0.0]; 
constraint.priority = UILayoutPriorityDefaultLow; 
[viewA.superview addConstraint:constraint]; 

Theo tài liệu cho priority:

Nếu một hạn chế 'a == b' là tùy chọn, hệ thống bố trí hạn chế dựa trên sẽ cố gắng hạn chế tối đa ' abs (a-b) '.

Vì vậy, nếu viewB lớn hơn viewC, hạn chế tùy chọn này sẽ được hài lòng và viewA sẽ rộng như viewB. Nếu viewB nhỏ hơn viewC, hệ thống ràng buộc sẽ đáp ứng yêu cầu @"H:[viewA(>=viewC)]" ràng buộc, nhưng sau đó cũng sẽ giảm thiểu abs(a-b), có hiệu quả làm cho viewA cùng chiều rộng như viewC.

Trong thực tế, có thể bạn không cần bắt buộc viewA==viewB ràng buộc này, nhưng nếu bạn muốn đảm bảo rằng viewA sẽ không được rộng hơn cả viewBviewC, sau đó thêm hạn chế tùy chọn cuối cùng này.

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