2014-09-19 80 views
25

我有一个项目与XCode 5和iOS 7一起工作得很好,但是当我最近下载XCode 6时,我注意到一些奇怪的行为与自动布局。在视图出现后应用iOS 8/XCode 6自动布局约束

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

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

+2

看到我的答案在这里:http://stackoverflow.com/a/26290775/1342565 – dfickling 2014-10-10 01:58:23

+0

有同样的问题,非常讨厌。它不仅适用于查看控制器,还适用于收集和表格视图单元格。 – Mikhail 2014-10-21 19:07:52

+0

这是这个问题的重复http://stackoverflow.com/questions/25791183/ios-8-uipageviewcontroller-applying-constraints-after-transitions – kraag22 2015-03-19 14:35:42

回答

9

您的代码正在对您的约束进行更改的位置在哪里?

如果你保留在viewWillAppear:你会有这个问题。我发现viewDidLayoutSubviews适用于iOS8,但不一定适用于iOS7。

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

+3

这是奇怪的事情 - 我没有改变约束。它们都是在故事板的编译时指定的。让我试着隐藏视图,然后取消隐藏 - 这听起来像应该起作用。 – wuc 2014-09-19 02:14:42

+3

最后,我最终隐藏了viewDidLoad中视图中的所有元素,然后在viewDidAppear中隐藏它们。这似乎是iOS 8中的UIPageViewController的一个错误,因为自动布局在以前版本的iOS中没有这个问题。 – wuc 2014-09-19 21:51:09

+0

@wuc - 你是如何隐藏所有元素然后取消隐藏的?我很难考虑如何工作。 – CommaToast 2015-04-20 18:06:00

0

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

我并不喜欢这种解决方案,最终没有这样做。

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

0

对我来说,这是我的项目中的标签栏的问题。我并不需要这个观点,而是将它隐藏起来。因此,当视图被推入堆栈时,该栏被隐藏,并相应地调整约束。所以我只是把标签栏放回去。