2016-07-04 71 views
0

我在Xcode 7中使用Autolayout并定位到iOS 9.3。我有一个主视图控制器,它拥有一个容器视图。容器视图包含一个子视图控制器。Swift:容器视图布局在旋转并再次旋转时发生变化

容器视图的前导和尾随约束为-20,因此它完全在水平方向上覆盖主视图控制器。

然而,当主视图控制器第一次加载时,容器内显示的子视图控制器的内容在左侧和右侧略微切断(就好像它不识别约束在-20左右)。

当我将设备旋转到横向,然后再次回到原始纵向时,子视图控制器突然正确缩放,不再在左侧和右侧切断。

所以看起来像是一些布局方法在将设备侧向旋转并将其旋转回来时被调用,这种方法在视图第一次加载时不会被调用。这可能是什么方法?有没有办法,我可以手动调用此方法来强制更新布局/大小,当孩子第一次加载,以便它看起来像旋转和向后旋转后相同?

+0

请显示codez。根据我对自动布局的经验,你应该总是怀疑你的代码是这种情况下的罪魁祸首,所以最可能发生的事情是你的约束设置不是你想象的那样,但是如果没有看到代码就不能多说。 – lawicko

+0

您可以在视图上调用'layoutIfNeeded()'来触发布局的更新。至于你正在寻找的方法:假设你没有使用旋转方法,方向改变触发的方法将是'viewWillTransitionToSize:' – sketchyTech

+0

我已经尝试调用Container视图的viewDidAppear方法中的layoutIfNeeded()。我也尝试在子视图控制器的viewDidAppear方法中调用它,但这没有效果。 – Stanley

回答

0

首先,您不需要为-20设置保证金。容器视图每边的0边距足以使子视图分散到主容器视图之外。我已经尝试了你的想法,但没有问题。您可以从下面的github链接下载该项目;

The link

0

我找到了一个解决问题的办法:

而不是设置一个前沿和-20在容器视图尾随约束,我设置的容器视图约束为相同的宽度作为主视图并将其居中放置在容器中。

有了这些限制,它可以在第一次加载时起作用,但我无法完全解释为什么它的行为与原始限制不同。我想这个教训是,如果在某些情况下,使用Autolayout来确定容器大小的方式会有些笨拙,请尝试使用另一组约束来达到相同的结果。

+0

stanley,我在使用应用程序时遇到了容器问题.. [link](http://stackoverflow.com/questions/38008852/uipageviewcontroller-within-a-containerview-is-not-working-properly)。这是link.please只是看看。 –