Tôi cảm thấy như đó là một mô hình khá phổ biến để hiển thị / ẩn UIViews
, thường xuyên nhất UILabels
, tùy thuộc vào logic kinh doanh. Câu hỏi của tôi là, cách tốt nhất để sử dụng AutoLayout để trả lời các chế độ xem ẩn như thể khung của chúng là 0x0. Dưới đây là một ví dụ về danh sách động gồm 1-3 tính năng.
Ngay bây giờ tôi có một không gian trên cùng 10px từ nút đến nhãn cuối cùng, điều này rõ ràng sẽ không trượt lên khi nhãn bị ẩn. Ngay bây giờ tôi đã tạo ra một lối thoát cho ràng buộc này và sửa đổi hằng số tùy thuộc vào số lượng nhãn tôi đang hiển thị. Đây rõ ràng là một chút hack vì tôi đang sử dụng các giá trị âm liên tục để đẩy nút lên trên các khung ẩn. Điều đó cũng tệ vì nó không bị hạn chế đối với các yếu tố bố cục thực tế, chỉ lén lút tính toán dựa trên độ cao / phần đệm của các yếu tố khác và rõ ràng là chiến đấu chống lại những gì AutoLayout được tạo ra.
Rõ ràng tôi chỉ có thể tạo ra các ràng buộc mới tùy thuộc vào nhãn động của mình, nhưng đó là rất nhiều vi mô và rất nhiều chi tiết cho việc cố gắng thu gọn một số khoảng trắng. Có cách tiếp cận tốt hơn? Thay đổi kích thước khung 0,0 và để AutoLayout thực hiện công việc của mình mà không cần thao tác với các ràng buộc? Xóa quan điểm hoàn toàn?
Thành thật mà nói, chỉ cần sửa đổi hằng số từ ngữ cảnh của chế độ xem ẩn yêu cầu một dòng mã với phép tính đơn giản. Tái tạo những hạn chế mới với constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
dường như rất nặng nề.
Chỉnh sửa tháng 2 năm 2018 : Xem câu trả lời của Ben với UIStackView
s