出现视图后应用iOS 8/XCode 6自动布局约束

wuc*_*wuc 25 xcode ios uipageviewcontroller autolayout xcode6

我有一个与XCode 5和iOS 7一起工作得很好的项目,但是当我最近下载XCode 6时,我注意到autolayout出现了一些奇怪的行为.

我有一个故事板,其视图只有一个UIImageView和两个UILabel.使用UiPageViewController加载此视图.UIImageView在视图中水平和垂直居中,并且存在约束,指定两个标签与图像视图的距离.当故事板和自动布局值发生冲突时(例如,在故事板中,一个标签在图像视图上方20个像素但自动布局显示它应该在40像素以上),过去的自动布局值是在加载视图之前成功应用.因此,当视图第一次显示时,一切都在正确的位置.

现在使用iOS 8/XCode 6,我看到视图加载然后事情跳转到他们的最终自动布局位置.在模拟器和真实设备上,这种跳转对于最终用户来说是显而易见的,而且它真的很烦人.有没有办法回到过去的行为?据我所知,没有代码更改导致此问题.

Mar*_*iro 9

您的代码在哪里更改约束?

如果你将它保存在viewWillAppear中:你将遇到这个问题.我发现viewDidLayoutSubviews适用于iOS8,但并不总是适用于iOS7.

最后,如果你不能使用viewDidLayoutSubviews,我建议隐藏容器视图在viewDidLoad中,并在viewWillAppear中取消隐藏它,只有在应用了约束之后.加载屏幕时会给您带来一点额外的延迟,但约束更改会对用户透明.

  • 这是奇怪的事情 - 我根本没有改变约束.它们都是在编译时在故事板中指定的.让我尝试隐藏视图然后取消隐藏它 - 这听起来应该有效. (3认同)
  • 最后,我最终隐藏了viewDidLoad中视图中的所有元素,然后在viewDidAppear中取消隐藏它们.这似乎是iOS 8中UIPageViewController的一个错误,因为autolayout在以前版本的iOS中没有这个小故障. (3认同)