2012-12-19 39 views
5

thể trùng lặp:
UIViewController returns invalid frame?bố trí subview khác nhau trong viewDidLoad và viewWillAppear

Trong khi gỡ lỗi tôi đã nhận thấy rằng trong viewDidLoad gọi khung quan điểm của tôi là origin=(x=0, y=20) size=(width=320, height=460) mà không phải là chính xác. Trong viewWillAppear gọi nó được thiết lập chính xác: origin=(x=0, y=0) size=(width=320, height=416) xem xét chiều cao thanh điều hướng. Bố cục xem phụ thuộc của tôi phụ thuộc vào chế độ xem gốc, nhưng tôi không muốn thiết lập chúng mỗi lần xem sẽ xuất hiện.

Chúng ta nên xử lý như thế nào với hai cuộc gọi này?

+0

Đối phó với chính xác như bạn đã từng. Do xem thiết lập trong -viewWillAppear, bởi vì đó là một trong đó chiếm chiều cao thanh nav, sau đó làm khởi tạo trong -viewDidLoad. – CodaFi

Trả lời

6

Địa điểm thích hợp để xử lý bố cục chế độ xem nằm trong phương thức UIViewController viewWillLayoutSubviews. Điều này được gọi bất cứ khi nào chế độ xem của trình điều khiển chế độ xem có kích thước như khi được hiển thị lần đầu tiên và khi được xoay.

Như bạn đã thấy, chế độ xem của trình điều khiển chế độ xem chưa được định cỡ đầy đủ khi được gọi là viewDidLoad.

Nếu bạn cần hỗ trợ iOS 4.3 thì bạn không thể sử dụng viewWillLayoutSubviews kể từ khi được thêm vào 5.0. Trong trường hợp này, hãy bố trí trong viewWillAppear:.

+0

Cần lưu ý rằng -viewWillAppear CÓ THỂ được gọi trước khi khung xem được đặt và cửa sổ đã hoàn thành việc định hướng chính nó. Nếu bạn cần điều đó trong iOS 4 bạn cần phải chờ cho -viewDidAppear được gọi. –