2016-02-16 22 views
15

Tôi có một UIStackView, bên trong một UIScrollView để hiển thị subviews động thêm chiều ngang sắp xếp. giải pháp hiện tại sẽ bắt đầu hiển thị các mục từ bên trái, tôi muốn bắt đầu phân phối các mặt hàng từ trung tâm mà không thay đổi chiều rộng và chiều cao của subviews. Làm thế nào để làm điều đó? Im cũng mở cửa cho giải pháp mà không sử dụng UIStackView là tốt. Bằng cách đó tôi có thể hỗ trợ các thiết bị < iOS9.UIStackView - Distribute quan điểm đồng đều từ trung tâm

Curent

(hiện)

Expected

(Dự kiến ​​)

+0

Bạn đang làm việc trong Swift hoặc Objective C? –

+0

Im làm việc trên Swift 2.0 – r3dsm0k3

+0

Bạn sẽ giới hạn số lượng subViews tại 3 bên trong stackView? – Adrian

Trả lời

14

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

enter image description here

CenterYCenterX 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

enter image description here

  • 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)

enter image description here

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 :)

enter image description here

Hy vọng rằng sẽ giúp.

Code source

+0

Công việc tuyệt vời! Cảm ơn bạn rất nhiều! –

+0

Chào mừng bạn đến với @VladPulichev, cảm ơn rất nhiều vì những lời tốt đẹp của bạn –

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