Câu trả lời là [view layoutIfNeeded]
.
Đây là lý do tại sao:
Bạn vẫn nhận được chiều rộng và chiều cao hiện tại của chế độ xem bằng cách kiểm tra view.bounds.size.width
và view.bounds.size.height
(hoặc khung, tương đương trừ khi bạn đang chơi với view.transform
).
Nếu những gì bạn muốn là chiều rộng và chiều cao được ngụ ý bởi các ràng buộc hiện có của bạn, câu trả lời là không phải kiểm tra các ràng buộc theo cách thủ công, vì điều đó sẽ yêu cầu bạn triển khai lại toàn bộ logic giải quyết ràng buộc của hệ thống bố cục tự động để giải thích những điều đó những ràng buộc. Thay vào đó, những gì bạn nên làm chỉ là yêu cầu bố cục tự động cập nhật bố cục đó , để nó giải quyết các ràng buộc và cập nhật giá trị của view.bounds với giải pháp chính xác, sau đó bạn kiểm tra view.bounds.
Làm thế nào để bạn yêu cầu bố cục tự động để cập nhật bố cục? Gọi [view setNeedsLayout]
nếu bạn muốn bố cục tự động để cập nhật bố cục vào lượt tiếp theo của vòng chạy.
Tuy nhiên, nếu bạn muốn nó cập nhật bố cục ngay lập tức, để bạn có thể truy cập ngay vào giá trị giới hạn mới sau này trong hàm hiện tại của mình hoặc tại một thời điểm khác trước khi đến lượt của vòng chạy, thì bạn cần gọi [view setNeedsLayout]
và [view layoutIfNeeded]
.
Bạn đã hỏi câu hỏi thứ hai: "làm thế nào tôi có thể thay đổi giới hạn chiều cao / chiều rộng nếu tôi không có tham chiếu trực tiếp đến nó?".
Nếu bạn tạo ràng buộc trong IB, giải pháp tốt nhất là tạo IBOutlet trong bộ điều khiển chế độ xem hoặc chế độ xem của bạn để bạn có tham chiếu trực tiếp đến nó. Nếu bạn đã tạo ràng buộc trong mã, thì bạn nên giữ một tham chiếu trong thuộc tính yếu bên trong tại thời điểm bạn tạo nó. Nếu ai đó khác đã tạo ràng buộc, thì bạn cần tìm nó bằng cách kiểm tra việc kiểm tra thuộc tính view.constraints trên chế độ xem, và có thể là toàn bộ hệ thống phân cấp chế độ xem và thực hiện logic tìm ra NSLayoutConstraint quan trọng. Đây có lẽ là một cách sai lầm, vì nó cũng yêu cầu bạn xác định ràng buộc cụ thể nào xác định kích thước giới hạn, khi không được đảm bảo là một câu trả lời đơn giản cho câu hỏi đó. Giá trị giới hạn cuối cùng có thể là giải pháp cho một hệ thống rất phức tạp gồm nhiều ràng buộc,