Tôi đã thiết lập các ràng buộc của mình trong viewDidLoad
/ loadView
(Tôi đang nhắm mục tiêu iOS> = 6). updateViewConstraints
rất hữu ích cho việc thay đổi giá trị của các ràng buộc, ví dụ: nếu một số ràng buộc phụ thuộc vào hướng của màn hình (tôi biết, đó là một cách làm không tốt), bạn có thể thay đổi nó constant
trong phương pháp này.
Việc thêm các ràng buộc vào viewDidLoad
được hiển thị trong phiên "Giới thiệu về Bố cục Tự động cho iOS và OS X" (WWDC 2012), bắt đầu từ 39:22. Tôi nghĩ đó là một trong những điều được nói trong các bài giảng nhưng không có trong tài liệu.
CẬP NHẬT: Tôi đã nhận thấy đề cập đến việc thiết lập các ràng buộc trong Quản lý tài nguyên trong Bộ điều khiển chế độ xem :
Nếu bạn muốn tạo chế độ xem theo lập trình, thay vì sử dụng bảng phân cảnh, bạn làm như vậy bằng cách ghi đè loadView
phương thức của bộ điều khiển chế độ xem của bạn . Việc triển khai phương pháp này của bạn phải thực hiện như sau:
(...)
3.Nếu bạn đang sử dụng bố cục tự động, hãy gán đủ các ràng buộc cho mỗi dạng xem bạn vừa tạo để kiểm soát vị trí và kích thước của dạng xem của bạn . Nếu không, hãy triển khai viewWillLayoutSubviews
và
viewDidLayoutSubviews
các phương pháp để điều chỉnh khung của các chế độ xem phụ trong phân cấp chế độ xem. Xem “Thay đổi kích thước các chế độ xem của View Controller.”
CẬP NHẬT 2 : Trong WWDC 2015, Apple đã đưa ra giải thích mới về cách sử dụng updateConstraints
và updateViewConstraints
khuyến nghị:
Thực sự, tất cả những điều này là một cách để các chế độ xem có cơ hội thực hiện các thay đổi đối với các ràng buộc đúng lúc cho lần chuyển bố cục tiếp theo, nhưng nó thường không thực sự cần thiết.
Tất cả các thiết lập ràng buộc ban đầu của bạn lý tưởng nên diễn ra bên trong Trình tạo giao diện.
Hoặc nếu bạn thực sự thấy rằng bạn cần phân bổ các ràng buộc của mình theo lập trình, một số nơi như viewDidLoad sẽ tốt hơn nhiều.
Các ràng buộc cập nhật thực sự chỉ dành cho công việc cần được lặp lại định kỳ.
Ngoài ra, khá đơn giản là chỉ thay đổi các ràng buộc khi bạn thấy cần phải làm điều đó; ngược lại, nếu bạn tách logic đó ra khỏi mã khác có liên quan đến nó và bạn chuyển nó sang một phương thức riêng biệt sẽ được thực thi sau đó, thì mã của bạn sẽ trở nên khó theo dõi hơn rất nhiều, vì vậy bạn sẽ khó bảo trì hơn , người khác sẽ khó hiểu hơn rất nhiều.
Vậy khi nào bạn cần sử dụng các ràng buộc cập nhật?
Chà, nó tổng hợp thành hiệu suất.
Nếu bạn thấy rằng việc chỉ thay đổi các ràng buộc tại chỗ là quá chậm, thì các ràng buộc cập nhật có thể giúp bạn.
Nó chỉ ra rằng việc thay đổi một ràng buộc bên trong các ràng buộc cập nhật thực sự nhanh hơn việc thay đổi một ràng buộc vào những thời điểm khác.
Lý do cho điều đó là bởi vì động cơ có thể coi tất cả các thay đổi ràng buộc xảy ra trong lần vượt qua này là một đợt.