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

标签 ios xcode autolayout xcode6 uipageviewcontroller

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

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

现在使用 iOS 8/XCode 6,我看到加载 View ,然后事情跳转到它们最终的自动布局位置。在模拟器和真实设备上,最终用户都会注意到这种跳跃,这真的很烦人。有没有办法回到旧的行为?据我所知,没有任何代码更改会导致此问题。

最佳答案

更改约束的代码在哪里?

如果您将它保存在 viewWillAppear: 中,您就会遇到这个问题。我发现 viewDidLayoutSubviews 适用于 iOS8,但并不总是适用于向后的 iOS7。

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

关于 View 出现后应用 iOS 8/XCode 6 自动布局约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25925058/

相关文章:

ios - 为 Xamarin.iOS 应用程序强制 RTL

Xcode 测试失败不会失败 Github 操作管道

swift - 类型 'StorageMetadata' 的值没有成员 'downloadURL'

ios - Xcode 5 和为以前版本的 iOS 部署的应用程序

swift - 不一致的自动布局渲染

ios - 防止在 NSAttributedString 中换行

ios - 如何在UIImagePickerController的自定义控件中使用不同模式之间的切换?

ios - 如何获取AlertIOS.prompt的promptValue

ios - 自动布局 + UIScrollView 和单个 subview

iOS 使用自动布局以编程方式修复 UIScrollView 中 subview 的位置