У меня есть два контроллера вида, родительский и дочерний.Ограничения автоопределения и контроллер дочернего представления
Таким образом, в методе viewDidLoad
я делаю следующее:
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
//
Так в основном то, что происходит, что updateViewConstraints
вызывается ChildViewController Перед ограничениями родительского контроллера применяются, поэтому на самом деле self.view.frame == CGRectZero
, точно так же, как я указал в изготовленный под заказ loadView
способ в ChildViewController
.
translatesAutoresizingMaskIntoConstraints
все установлено на NO
для всех просмотров.
Каков правильный способ установки ограничений в этом случае, так что ChildViewController
обновляет свои ограничения после родительского?
Текущий журнал обоих контроллеров довольно сложно, я не понимаю, как updateViewConstraints может быть вызван до 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}}
Вам нужно показать код, в котором вы фактически добавляете свои ограничения, иначе сложно сказать, что не так. – Maarten
@Maarten Я решил проблему и ответил ниже, не уверен, что это решение, которое я искал, кажется неправильным, но оно работает. Извините, что я не могу опубликовать код, это слишком много кода ... – Andy