Câu trả lời ngắn:
Sc rollView chế
Leading >= 0, Trailing >= 0, Top >= 0, Bottom >= 0
Center X and Center Y
StackView chế
Leading = 0, Trailing = 0, Top = 0, Bottom = 0
StackView width = ScrollView width (priority low :250)
StackView height = ScrollView height
Long trả lời
Thứ nhất, cấu trúc của bạn là tốt, ta có:
UIScrollView
UIStackView (horizontal)
Subviews
Vì vậy, để đạt được mục tiêu chúng tôi nên:
012.
- Trung tâm
UIScrollView
- Đặt contentSize của
UIScrollView
bằng nội tại kích thước nội dung của UIStackView
Sau đây là cách để làm điều đó:
Bước 1: Trung tâm khung của UIScrollView
CenterY
và CenterX
hạn chế sử dụng để tập trung khung của UIScrollView
Leading Space
> = 0, Trailling Space
> = 0, Top Space
> = 0, Bottom Spac
e> = 0 được sử dụng để ngăn chặn các khung của UIScrollView vượt quá khung của chế độ xem gốc
Tôi đã sử dụng kích thước nội tại trình giữ chỗ để không hiển thị lỗi liên quan đến nội dungKích thước của UIScrollView
(vì chúng tôi chưa có các bản xem trước để contentSize).
Bây giờ, khung của UIScrollView
của chúng tôi là Ok, đi đến bước tiếp theo :)
Bước 2: thêm UIStackView ngang
- Top, Bottom, hàng đầu , Ràng buộc Trailing được sử dụng để sửa chữa khung UIStackView
- Chiều cao bằng nhau và chiều rộng bằng nhau được sử dụng để tính toán thứ e contentSize của UIScrollView
PS. Bất kỳ sự thay đổi trong khung của UIStackView, thay đổi contentSize của UIScrollView
Bước 3: thêm subviews
Bởi vì chúng tôi sử dụng Fill Distribution
trong UIStackView
tất cả subviews
phải có một kích thước thực chất nội dung (hoặc chiều cao và chiều rộng ràng buộc (không được ưu tiên)). Ví dụ: nếu chúng tôi sử dụng Fill Equally
, chỉ một subview
với kích thước nội dung nội tại (hoặc chiều cao và chiều rộng ràng buộc (không được ưa thích)) đủ, kích thước phụ đề khác sẽ bằng với kích thước này.
Ví dụ: Tôi sẽ bổ sung thêm 3 nhãn (xin vui lòng loại bỏ các placeholder kích thước nội tại của UIScrollView
)
Nó hoạt động !! không, không, chưa cố gắng thêm nhãn thứ tư và năm :)
Tại sao?
Để hiểu chúng tôi sẽ tính toán khung của mỗi yếu tố của quan điểm với hai ví dụ:
Kích thước xem mẹ: 200, 200 Nhãn đầu tiên bên trong kích thước nội dung: 120, 50 nhãn thứ hai bên trong kích thước nội dung: 150, 50
dụ đầu tiên (chỉ nhãn đầu tiên trong UIStackView
)
UIStackView
kích thước nội content = 120, 50
UIScrollView
contentSize = 120, 50
UIScrollView
khung = 40, 75, 120, 50
Tất cả khung là OK
dụ thứ hai (với hai nhãn)
UIScrollView
khung = 0, 0, 200, 50
UIScrollView
contentSize = 200, 50
UIStackView
nội tại kích thước content = 200, 50
Vì vậy, UIStackView
không thể hiển thị một cách chính xác hai nhãn (vì chiều rộng của UIStackView
thấp hơn chiều rộng của hai nhãn) và chúng tôi không có cuộn vì chiều rộng ràng buộc UIStackView
bằng với chiều rộng UIScrollView. Nó hoạt động khi kích thước nội dung nội tại UIStackView
thấp hơn khung tối đa UIScrollView
.
Để Fix rằng, chúng ta thay đổi độ ưu tiên của chế độ rộng đến một giá trị thấp hơn so với giá trị ưu tiên kích thước nội dung bên trong UIStackView
, và tất cả hoạt động tốt :)
Hy vọng rằng sẽ giúp.
Code source
Bạn đang làm việc trong Swift hoặc Objective C? –
Im làm việc trên Swift 2.0 – r3dsm0k3
Bạn sẽ giới hạn số lượng subViews tại 3 bên trong stackView? – Adrian