更改方向的自动布局约束

时间:2016-05-03 16:47:21

标签: ios autolayout ios-autolayout

我有一个不同的应用程序,取决于它是纵向还是横向(具体来说,是否高度>宽度)。在旋转时,在viewWillTransitionToSize:withTransitionCoordinator:中,我适当地更新了一些自动布局约束的常量。问题在于,此时视图框架还没有实际旋转,所以我经常在调试器中得到一个愤怒的信息,即我的约束不能满足。

我的问题是:在旋转序列中的哪一点,我修改了约束,以便视图的帧已经改变,但我仍然可以在旋转的同时获得动画? / p>

This question建议在[self.view setNeedsUpdateConstraints]中调用willAnimateRotationToInterfaceOrientation,但该方法现已弃用。我尝试在viewWillTransitionToSize中调用该方法,但仍然得到了愤怒的消息。

1 个答案:

答案 0 :(得分:2)

我似乎解决了它。请参阅this articlePureLayout。基本上是:

  • 实施类似-(void)updateConstraintsForSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator;
  • 的方法
  • 在此方法中,如果您已旋转(将状态存储在某处),请卸载所有约束并生成新约束。如果您有协调员,请在协调器的[self.view layoutIfNeeded]阻止参数中安装它们并animateAlongsideTransition。否则只需安装和布局。
  • 覆盖viewDidLayoutSubviews并使用self.view.bounds.sizenil
  • 调用此方法
  • 覆盖viewWillTransitionToSize:withTransitionCoordinator:并正确调用您的方法