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

时间:2014-09-19 01:40:48

标签: ios xcode autolayout xcode6 uipageviewcontroller

我有一个项目在XCode 5和iOS 7上运行得很好,但是当我最近下载XCode 6时,我发现了一些与autolayout有关的奇怪行为。

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

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

3 个答案:

答案 0 :(得分:9)

您的代码在何处更改约束?

如果您将其保存在 viewWillAppear:中,您将遇到此问题。我发现 viewDidLayoutSubviews 适用于iOS8,但并不总是适用于iOS7。

最后,如果您无法使用 viewDidLayoutSubviews ,我建议隐藏 viewDidLoad 中的容器视图,并在 viewWillAppear ,仅在应用约束之后。加载屏幕时会有一点额外的延迟,但约束更改对用户来说是透明的。

答案 1 :(得分:0)

我遇到了类似的问题,并将项目放入容器视图中以准备隐藏,然后按照其他答案中的建议显示它们。

作为一种解决方案,我并不喜欢这种情况,最终没有必要这样做。

只需将它们放在与控制器视图挂钩的容器视图中就可以解决问题。

答案 2 :(得分:0)

对我来说,这是项目中标签栏的问题。在那个视图中我并不需要它,我把它隐藏起来。因此,当视图被推入堆栈时,条形图被隐藏,约束条件也相应调整。所以我只是把标签栏放回去了。