【发布时间】:2016-07-04 14:28:39
【问题描述】:
我在 Xcode 7 中工作,使用 Autolayout 并针对 iOS 9.3。我有一个包含容器视图的主视图控制器。 Container View 拥有一个 Child View Controller。
Container View 的前导和尾随约束为 -20,因此它在水平方向上完全覆盖了 Main View Controller。
然而当Main View Controller第一次加载时,在Container内部显示的来自Child View Controller的内容在左右被稍微截断了(几乎就好像它不识别的约束一样) -20 左右)。
当我将设备旋转到横向,然后又回到原来的纵向时,子视图控制器突然正确缩放,并且不再在左侧和右侧被切断。
因此,当设备横向旋转并再次旋转回来时,似乎调用了某些布局方法,而在首次加载视图时不会调用该方法。这可能是什么方法?有没有一种方法可以在第一次加载子项时手动调用此方法来强制更新布局/大小,使其看起来与旋转和向后旋转后相同?
【问题讨论】:
-
请显示 codez。根据我在自动布局方面的经验,在这种情况下,您应该始终怀疑您的代码是罪魁祸首,所以最有可能发生的是您的约束设置不是您认为的那样,但如果没有看到代码就不能说更多。
-
您可以在视图上调用
layoutIfNeeded()来触发对布局的更新。至于您正在寻找的方法:假设您不使用旋转方法,由方向更改触发的方法将是viewWillTransitionToSize: -
我尝试在容器视图的 viewDidAppear 方法中调用 layoutIfNeeded()。我也试过在子视图控制器的 viewDidAppear 方法中调用它,但这没有效果。
标签: ios xcode swift ios-autolayout