【发布时间】:2020-09-19 23:14:36
【问题描述】:
我有两个视图控制器,父级和子级。
所以在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
//
所以基本上发生的情况是在父控制器约束应用之前在 ChildViewController 上调用了updateViewConstraints,所以实际上self.view.frame == CGRectZero,与我在ChildViewController 中的自定义loadView 方法中指定的完全相同。
对于所有视图,translatesAutoresizingMaskIntoConstraints 全部设置为 NO。
在这种情况下设置约束的正确方法是什么,以便ChildViewController 在父级之后更新他的约束?
来自两个控制器的当前日志非常令人沮丧,我不明白如何在 viewWillLayoutSubviews 之前调用 updateViewConstraints:
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 我解决了这个问题并在下面发布了答案,不确定它是否是我正在寻找的解决方案,它似乎错误,但它有效。对不起,我不能发布代码,代码太多了......