Tôi có hai bộ điều khiển chế độ xem, cha mẹ và con.Ràng buộc tự động hoàn tất và bộ điều khiển xem trẻ em
Vì vậy, trong phương pháp viewDidLoad
tôi làm như sau:
ChildViewController* childViewController = [[ChildViewController alloc] init];
[self addChildViewController:childViewController];
// ChildViewController sets his own constraints in viewDidLoad
[self.view addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
//
// setup constraints to expand childViewController.view to
// fill the size of parent view controller
//
Vì vậy, về cơ bản những gì xảy ra là updateViewConstraints
được kêu gọi ChildViewController trước khi chế điều khiển cha mẹ áp dụng, vì vậy trên thực tế self.view.frame == CGRectZero
, chính xác giống như tôi đã chỉ định trong tùy chỉnh phương thức loadView
trong ChildViewController
.
translatesAutoresizingMaskIntoConstraints
tất cả được đặt thành NO
cho tất cả chế độ xem.
Cách thích hợp để thiết lập các ràng buộc trong trường hợp này là như vậy ChildViewController
cập nhật các ràng buộc của mình sau khi cha mẹ?
hiện log từ cả hai bộ điều khiển là khá bực bội, tôi không hiểu làm thế nào updateViewConstraints có thể được gọi trước khi viewWillLayoutSubviews:
App[47933:c07] ChildViewController::updateViewConstraints. RECT: {{0, 0}, {0, 0}}
App[47933:c07] ParentViewController::updateViewConstraints
App[47933:c07] ChildViewController:viewWillLayoutSubviews. RECT: {{0, 0}, {984, 454}}
App[47933:c07] ChildViewController:viewDidLayoutSubviews. RECT: {{0, 0}, {984, 454}}
Bạn cần hiển thị mã nơi bạn thực sự thêm các ràng buộc của mình, nếu không khó có thể nói điều gì sai. – Maarten
@ Marta Tôi giải quyết vấn đề và đăng câu trả lời dưới đây, không chắc đó là giải pháp mà tôi đang tìm kiếm, có vẻ như sai, nhưng nó hoạt động. Rất tiếc, tôi không thể đăng mã, quá nhiều mã ... – Andy