我在 Xcode 6.1 上开始了一个新的单 View 项目
转到我的目标并将Device Family 设置为Universal 并将Deployment target 设置为7.1
在 Storyboard 中,我在 Size class Regular Width | 中放置了一个红色标签任何高度
和 Size Class Compact Width | 中的蓝色标签任何高度
根据文档,我应该在 ipad 上运行时看到红色标签,在 iphone 上运行时看到蓝色标签, 到目前为止,这在模拟器和实际设备上都按预期工作。
现在我回到目标并将Device Family 设置为iPad,再次运行应用程序:
模拟器上的 iPad 2 (7.1) - 红色标签
iPad 2 (7.1)(真实设备)- blue label ?!?!?
iPad 2 (8.1)(真实设备)- 红色标签
iPad Air/iPad mini 和我遇到的所有其他装有 IOS 7.1 的 iPad 也是如此
基本上我在通用 Storyboard上看到,在 ios 7.1 中为 iPad 设置设备系列时, Storyboard被认为是紧凑的尺寸。 我必须与 IOS 7.1 兼容,我的应用程序将首先只针对 iPad 发布。 有谁知道如何修复它?
编辑
根据 Apple Documentation : 对于支持 iOS 8 之前的 iOS 版本的应用程序,大多数尺寸类别都是向后兼容的。 Size classes 是向后兼容的,只要
该应用程序是使用 Xcode 版本 6 或更高版本构建的
应用部署目标早于iOS 8
大小类在 Storyboard或 xib 中指定
高度组件的值不紧凑
以上所有内容都适用于我的示例。
最佳答案
模拟器 VS。设备? 我已经能够重现您在模拟器中报告的问题。
我认为您假设您的模拟器工作正常,因为它会产生您期望的输出,而显示“错误”布局的是 iPad。然而,值得考虑的是 iPad 是否真的显示了您的配置的标准输出,即使该输出代表一个错误。 Xcode 中的 Storyboard 预览显示了正确的配置行为,但在 iPad 2 (7.1) 的模拟器中是不正确的,实际上在运行 iOS 7.1 时对于其他 iPad 型号也是如此。在模拟器中看到 iOS 8.x 的预期行为。因此,这不是模拟器与设备的问题。我怀疑你在模拟器中看到不同结果的原因只是你没有完成一个干净的构建,因为一些关键的变化导致了这个,所以它仍然使用旧的 XIB,因为它们被缓存的时间比它们应该的要长有时。
问题的原因?
您正在将项目的设备系列设置为仅针对 iPad,但在 Storyboard中包含 Compact Width | 尺寸类Any Height
,iPad 永远不应使用的尺寸等级。这可能是触发此问题的配置的一个方面。也就是说,它仍然不应该发生。这个问题在 Xcode 6.1 中都会出现,并且在当前的 6.2 beta 中没有什么不同。
您当前配置的某个特定方面可能会触发此问题。特别是,自动布局和设备目标以一些已记录但通常是开发人员意想不到的方式受到启动屏幕的影响。 (例如,将 Storyboard用于启动屏幕将默默地使您的应用程序普遍可用,即使您已指定它应该在您的目标中仅适用于 iPhone。)还有其他情况(请参阅 this Stack Overflow question and answer )将启动图像迁移到不同的配置解决了类似的问题。所以这值得一试。
关于IOS 7.1,如果目标设备系列设置为 iPad,通用 Storyboard 的常规宽度限制将被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26913843/