UIStackView
sử dụng các ràng buộc trong nội bộ để định vị các cuộc phỏng vấn được sắp xếp của nó. Chính xác những ràng buộc nào được tạo ra phụ thuộc vào cách cấu hình khung nhìn ngăn xếp. Theo mặc định, chế độ xem ngăn xếp sẽ tạo ra các ràng buộc bố trí các khung nhìn được sắp xếp của nó theo một đường nằm ngang, ghim các chế độ xem hàng đầu và theo dõi vào các cạnh hàng đầu và cuối của chính nó. Vì vậy, mã của bạn sẽ tạo ra một bố cục trông như thế này:
|[view1][view2]|
Không gian được phân bổ cho mỗi khung nhìn phụ được xác định bởi một số yếu tố bao gồm kích thước nội dung bên trong của khung nhìn phụ và đó là mức độ chống nén và ưu tiên ôm nội dung. Theo mặc định, các UIView
trường hợp không xác định kích thước nội dung bên trong. Đây là một cái gì đó thường được cung cấp bởi một lớp con, chẳng hạn như UILabel
hoặc UIButton
.
Do khả năng chống nén nội dung và ưu tiên ôm nội dung của hai UIView
trường hợp mới sẽ giống nhau và không chế độ xem nào cung cấp kích thước nội dung nội tại, nên công cụ bố trí phải đưa ra dự đoán tốt nhất về kích thước nên được phân bổ cho mỗi chế độ xem. Trong trường hợp của bạn, nó chỉ định chế độ xem đầu tiên 100% không gian có sẵn và không có gì cho chế độ xem thứ hai.
Nếu bạn sửa đổi mã của mình để sử dụng các UILabel
thể hiện thay thế, bạn sẽ nhận được kết quả tốt hơn:
UILabel *label1 = [UILabel new];
label1.text = @"Label 1";
label1.backgroundColor = [UIColor blueColor];
UILabel *label2 = [UILabel new];
label2.text = @"Label 2";
label2.backgroundColor = [UIColor greenColor];
[self.stack1 addArrangedSubview:label1];
[self.stack1 addArrangedSubview:label2];
Lưu ý rằng không cần thiết phải tự tạo ra bất kỳ ràng buộc nào. Đây là lợi ích chính của việc sử dụng UIStackView
- nó che giấu các chi tiết (thường xấu xí) của quản lý ràng buộc từ nhà phát triển.