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

我有一个在XCode 5和iOS 7上工作得很好的项目,但是当我最近下载XCode 6时,我注意到了一些自动布局的奇怪行为。

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

现在iOS 8 / XCode 6,我看到加载的视图,然后东西跳转到他们最后的自动布局的位置。 最终用户在模拟器和真实设备上都能看到这种跳跃,这真的很烦人。 有没有办法回到过去的行为? 据我所知,没有代码已经改变,导致这个问题。

你的代码是在哪里改变你的约束?

如果你保持它的意图,你会遇到这个问题。 我发现viewDidLayoutSubviews适用于iOS8,但不一定适用于iOS7。

最后,如果你不能使用viewDidLayoutSubviews ,我build议隐藏容器视图在viewDidLoad中,并取消隐藏在viewWillAppear ,只有约束已经被应用。 在加载屏幕时,它会让您有一点额外的延迟,但约束更改对用户是透明的。

我有类似的问题,并把项目放入容器视图准备隐藏,然后显示他们的build议在另一个答案。

我不喜欢这个解决scheme,最终不必这样做。

简单地把它们放在一个与控制器视图挂钩的容器视图中,就可以避免这个问题的发生。

对我来说,这是我的项目中的标签栏的问题。 我不需要这样的看法,而是把它藏在推。 所以当视图被推到堆栈上时,栏被隐藏,并相应地调整约束。 所以我只是把标签栏放回去。