Câu trả lời của Rob Mayoff là chính xác và tuyệt vời, nhưng đặt nó theo một cách hơi khác: viewDidLoad
chỉ có nghĩa là chế độ xem đã được tải, tức là bộ điều khiển chế độ xem đã có chế độ xem. Nó không có nghĩa là khung nhìn đã được đặt trong giao diện. Đó thực sự là một trong những điều mà viewDidAppear:
có nghĩa là - và đó là lý do tại sao nó hoạt động khi bạn chạy mã của mình ở đó.
Bí quyết trong tình huống này, nơi bạn muốn khởi tạo một cái gì đó về chế độ xem, là làm điều đó đủ muộn nhưng chỉ thực hiện một lần. viewDidAppear:
có thể dễ dàng được gọi lại sau, nhưng bạn không muốn khởi tạo lại chế độ xem (trừ khi nó chưa được tải). Trong iOS 5, isMovingToParentViewController
cho phép bạn phân biệt các trường hợp cụ thể mà bạn đang tìm kiếm. Trước đó, nó có thể là cần thiết để thiết lập một lá cờ BOOL để bạn thực hiện khởi tạo cuối cùng chỉ một lần.
Bẫy liên quan là điều sẽ xảy ra khi ứng dụng khởi chạy theo hướng ngang. Ở đây cũng vậy, viewDidLoad
quá sớm vì giao diện vẫn chưa được xoay thành cảnh quan.
Tuy nhiên, vấn đề này không được phát sinh chút nào. Không nên để doanh nghiệp của bạn chèn chế độ xem của trình điều khiển chế độ xem. Quan điểm là bộ điều khiển chế độ xem gốc, trong trường hợp đó kích thước của nó được lấy tự động một cách chính xác, hoặc là con của bộ điều khiển chế độ xem gốc, trong trường hợp đó là công việc của trình điều khiển chế độ xem của cha mẹ để kích thước chế độ xem (dưới dạng UINavigationController, ví dụ, đã có), hoặc khung nhìn sẽ được trình bày một cách bình thường, trong trường hợp đó kích thước của nó sẽ được thiết lập tự động để khớp với khung nhìn nó thay thế. Vì vậy, tôi sẽ đề nghị rằng bạn rất câu hỏi cho thấy bạn đang làm điều gì đó sai trái.
Lưu ý, bạn cũng có thể quan sát sự thay đổi giá trị bằng cách sử dụng [Giá trị chính Quan sát] (http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html), mặc dù nó sẽ không cho kết quả chính xác giống như subclassing (khác khi sử dụng breakpoint) –
@lindonfox Bạn không thể quan sát một cách đáng tin cậy 'khung hình' của khung nhìn với KVO. Bạn cũng phải quan sát 'center',' bounds' và 'transform' của nó. –
Làm thế nào về 'viewWillAppear'? Dường như với tôi làm điều đó trong 'viewDidAppear' là quá muộn và sẽ dẫn đến hiện tượng trục trặc thị giác. – devios1