2016-01-16 18 views
11

Tôi có chế độ xem ngăn xếp ngang mà tôi đã thêm các chế độ xem phụ được sắp xếp vào nó (7 ô). Mỗi một ô trong ngăn xếp có một huy hiệu hình tròn vượt quá giới hạn khung nhìn (ràng buộc âm). Khi chạy, như bạn có thể thấy bên dưới, mỗi ô nằm trên đỉnh của biểu tượng của ô trước đó. Tôi muốn thay đổi thứ tự để các huy hiệu sẽ hiển thị hoàn toàn.Số lần xem chồng chéo trong UIStackView

enter image description here

Cố gắng chơi với chỉ số Z nhưng nó đã không giúp đỡ như các lớp là bằng cách nào đó không bằng phẳng như bạn có thể nhìn thấy trong hệ thống phân cấp view sau:

enter image description here

Bất kỳ ý tưởng hay gợi ý làm thế nào để làm điều đó?

Cảm ơn.

Trả lời

7

Các documentation for the UIStackView class nói rằng:

Thứ tự của các mảng subviews xác định Z-trật tự của subviews. Nếu lượt xem trùng lặp, các bản xem trước có chỉ mục thấp hơn sẽ xuất hiện phía sau các bản xem trước có chỉ mục cao hơn.

đó chính xác là những gì tôi đã gặp phải trong câu hỏi. Đến hơn đến trường hợp cụ thể của tôi, tôi đã làm các trick của việc thay đổi ngữ nghĩa của quan điểm là RTL như có ong nhìn thấy ở đây:

enter image description here

này không được bao gồm các trường hợp chung chung vì một thiết bị có thể được thiết lập một ngôn ngữ RTL trong các thiết lập chung của nó. Đối với trường hợp chung chung tôi đoán tôi sẽ cần phải kiểm tra ngữ nghĩa giao diện và buộc một hướng ngược lại để xem stack của tôi.

P.S. Đó là loại hack vì vậy bất kỳ ý tưởng về cách sắp xếp lại thứ tự Z của các bản xem trước theo một cách khác sẽ được chào đón nhiều nhất!

1

Một ý tưởng khác có thể là đặt màu nền của các bản xem trước (7 ô) thành mặc định (hoàn toàn trong suốt). Và chỉ thiết lập nền của chế độ xem ngăn xếp chính nó thành màu trắng.

Tôi có vấn đề tương tự nhưng trong đó mỗi tiểu sử phải có một nền tảng cụ thể. Và trong trường hợp của tôi, hack của bạn có thể giúp ... Cảm ơn vì điều đó!

2

Vì iOS 9.0 có thể đặt thứ tự z và sắp xếp các xem phụ của chế độ xem ngăn xếp một cách độc lập. Sử dụng thuộc tính arrangedSubviews mới để chỉ định bố cục xem phụ dọc theo trục của chế độ xem ngăn xếp. Và sử dụng thuộc tính subviews để chỉ định các bản xem trước z-order dựa trên chỉ mục của chúng trong mảng.

Chế độ xem ngăn xếp đảm bảo rằng thuộc tính arrangedSubviews luôn là tập con của thuộc tính subviews.

Documentation for arrangedSubviews

1

Dưới đây là một phần mở rộng đơn giản trên UIStackView để đảo ngược z-index của subviews các 's UIStackView và tùy chọn yêu cầu bố trí:

extension UIStackView { 

    func reverseSubviewsZIndex(setNeedsLayout: Bool = true) { 
    let stackedViews = self.arrangedSubviews 

    stackedViews.forEach { 
     self.removeArrangedSubview($0) 
     $0.removeFromSuperview() 
    } 

    stackedViews.reversed().forEach(addSubview(_:)) 
    stackedViews.forEach(addArrangedSubview(_:)) 

    if setNeedsLayout { 
     stackedViews.forEach { $0.setNeedsLayout() } 
    } 
    } 

} 
4

giải pháp Swift này đảo ngược chồng xem để subview sử dụng phương pháp UIView sendSubview(toBack:) (docs here):

@IBOutlet weak var stackView: UIStackView! 

for view in stackView.arrangedSubviews { 
    stackView.sendSubview(toBack: view) 
} 

Khi chúng tôi xem qua các chế độ xem được sắp xếp của chế độ xem ngăn xếp (từ dưới lên trên), sau đó (tức là cao hơn) lượt xem được đẩy xuống dưới cùng, do đó đảo ngược thứ tự :-)

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