我正在为 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 调整和尝试了三天,但我并不比刚开始时聪明。
有人对这里可能出现的问题有任何建议或想法吗?