我正在开发一款 iPhone 和 iPad 应用程序,它支持 iOS6 和 iOS7,并且它只使用自动布局。上周,当苹果宣布 iOS8 已经准备好投入使用时,我将我的一个 iPhone 和一个 iPad 升级到了 iOS8,同时将 XCODE 升级到了版本 6。我还有另一个 iPhone,仍然运行在 iOS7 上。我使用 Xcode 6 生成了新的可执行文件,当我在运行 iOS8 的设备上执行时,屏幕布局混乱了,但在 iOS7 上运行良好。这在我的物理设备和 Xcode 的模拟器上都是如此。经过大量挖掘,我现在非常清楚发生了什么,尽管我不知道为什么。具体来说,在 iOS8 上,我遇到了某些自动布局操作失败的问题,但在 iOS7 上则正常。例如,我想在底层视图上放置一个按钮,其大小等于屏幕的大小:(1) 如果我要求自动布局将按钮的水平中心(CX)与底层视图的水平中心相等,则结果是将按钮的水平中心放置在底层视图的左边缘。(2)如果我要求自动布局使按钮的宽度等于底层视图宽度的50%,则它根本没有宽度。我能够通过以下方式解决这些问题:(1) 我要求自动布局将按钮的中心位置设置为底层视图的左侧加上屏幕宽度的50%。(2) 我要求自动布局使按钮的宽度等于屏幕宽度的50%。通过这样的解决方法,我慢慢摆脱了这些问题,让自动布局代码在 iOS7 和 iOS8 上都能正常工作。但是我真的很想知道这里到底发生了什么。看起来自动布局无法确定底层视图的大小,因此需要该信息的自动布局计算会失败。但是,它确实知道视图的顶部和左侧边缘的位置,因此基于这些数据的计算会成功。这是一个庞大的应用程序,我已经为 iOS6 和 iOS7 编写了数百行自动布局代码,对我来说完美无缺。我已经调整和尝试了三天 iOS8,但我并没有比开始时更明智。有人有什么建议或想法吗?