2015-10-07 14 views
37

Tôi có một đơn giản ngang UIStackView với một số UIViews xếp chồng lên nhau bên trong. Mục tiêu của tôi là tạo khoảng cách biến giữa các chế độ xem. Tôi nhận thức rõ rằng tôi có thể tạo không gian liên tục giữa các phần phụ sử dụng thuộc tính "khoảng cách". Tuy nhiên mục tiêu của tôi là tạo ra không gian biến đổi. Xin lưu ý, nếu có thể, tôi muốn tránh sử dụng chế độ xem vô hình hoạt động như miếng đệm.Làm cách nào để tạo UIStackView với khoảng cách biến giữa các chế độ xem?

Điều tốt nhất tôi đưa ra là bọc UIViews của tôi trong UIStackView riêng biệt và sử dụng layoutMarginsRelativeArrangement = YES để tôn trọng lề bố cục của ngăn xếp bên trong của tôi. Tôi đã hy vọng tôi có thể làm một cái gì đó tương tự với bất kỳ UIView mà không cần đến công việc này xấu xí xung quanh. Đây là mẫu mã của tôi:

// Create stack view 
UIStackView *stackView = [[UIStackView alloc] init]; 
stackView.translatesAutoresizingMaskIntoConstraints = NO; 
stackView.axis = UILayoutConstraintAxisHorizontal; 
stackView.alignment = UIStackViewAlignmentCenter; 
stackView.layoutMarginsRelativeArrangement = YES; 

// Create subview 
UIView *view1 = [[UIView alloc] init]; 
view1.translatesAutoresizingMaskIntoConstraints = NO; 
// ... Add Auto Layout constraints for height/width 
// ... 
// I was hoping the layoutMargins would be respected, but they are not 
view1.layoutMargins = UIEdgeInsetsMake(0, 25, 0, 0); 

// ... Create more subviews 
// UIView view2 = [[UIView alloc] init]; 
// ... 

// Stack the subviews 
[stackView addArrangedSubview:view1]; 
[stackView addArrangedSubview:view2]; 

Kết quả là một chồng với quan điểm ngay bên cạnh nhau với khoảng cách:

enter image description here

Trả lời

46

Cập nhật Đối với iOS 11, StackViews với Custom Spacing

Apple đã thêm khả năng thiết lập khoảng cách tùy chỉnh trong iOS 11. Bạn chỉ cần chỉ định khoảng cách sau mỗi lần xem phụ được sắp xếp. Rất tiếc, bạn không thể chỉ định khoảng trắng trước đây.

stackView.setCustomSpacing(10.0, after: firstLabel) 
stackView.setCustomSpacing(10.0, after: secondLabel) 

Vẫn còn tốt hơn cách sử dụng chế độ xem của riêng bạn.

Đối với iOS 10 và Dưới

Bạn chỉ có thể thêm một quan điểm minh bạch vào stack tầm nhìn của bạn và thêm những hạn chế chiều rộng đối với họ.

(Label - UIView - Label - UIView -Label)

và nếu bạn giữ distribution để điền vào, sau đó bạn có thể thiết lập biến hạn chế chiều rộng trên UIViews của bạn.

Nhưng tôi sẽ xem xét liệu đây có phải là tình huống phù hợp để sử dụng stackviews nếu đó là trường hợp. Autolayout làm cho nó rất dễ dàng để thiết lập độ rộng biến giữa các khung nhìn.

+2

Cảm ơn nhưng tôi đã hy vọng tôi không phải sử dụng chế độ xem trống để thêm không gian hoặc quay lại Bố cục tự động. Mặc dù nếu UIStackView không hỗ trợ trường hợp sử dụng của tôi, tôi có thể vẫn cần. – yura

+1

Tại sao bạn muốn khoảng cách thay đổi? Bạn có thể có khoảng cách biến nếu bạn sử dụng 'phân phối' 'bằng cách định tâm'. Điều này sẽ làm cho các trung tâm có chiều rộng bằng nhau, nhưng khoảng cách sẽ khác nhau. Giải thích thêm về trường hợp sử dụng của bạn. –

+0

Về cơ bản, tôi có một số chế độ xem mà tôi cần phân phối theo chiều ngang (hoặc theo chiều dọc) với khoảng cách được xác định trước giữa các chế độ xem, có thể có hoặc không có cùng giá trị. Tôi muốn có thể chỉ định các lề đó với layoutMargins hoặc một số cơ chế khác. – yura

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