IOS 7.1,如果目标设备系列设置为 iPad,通用情节提要上的常规宽度限制将被忽略

Posted

技术标签:

【中文标题】IOS 7.1,如果目标设备系列设置为 iPad,通用情节提要上的常规宽度限制将被忽略【英文标题】:IOS 7.1, Regular width constraints on universal storyboard ignored if Target device family set to iPad 【发布时间】:2015-01-10 21:23:27 【问题描述】:

我在 Xcode 6.1 上开始了一个新的单视图项目 转到我的目标并将 Device Family 设置为 Universal 并将 Deployment target 设置为 7.1

在故事板中,我在 Size 类中放置了一个红色标签 Regular Width | Any Height 和大小类中的蓝色标签Compact Width | Any Height

根据文档,在 ipad 上运行时我应该看到红色标签,在 iphone 上运行时应该看到蓝色标签, 到目前为止,这在模拟器和实际设备上都按预期工作。

现在我回到目标并将Device Family设置为iPad,再次运行应用程序:

    模拟器上的 iPad 2 (7.1) - 红色标签

    iPad 2 (7.1)(真实设备) - 蓝色标签 ?!?!?

    iPad 2 (8.1)(真实设备)-红色标签

iPad Air/iPad mini 和我遇到的所有其他装有 ios 7.1 的 iPad 也是如此

基本上我在通用故事板上看到,在 ios 7.1 中为 iPad 设置设备系列时,故事板被认为是紧凑尺寸。 我必须与 IOS 7.1 兼容,并且我的应用程序将首先仅针对 iPad 发布。 有没有人知道如何解决它?

编辑

根据Apple Documentation: 对于支持 iOS 8 之前的 iOS 版本的应用程序,大多数大小类都是向后兼容的。 只要大小类向后兼容

    该应用是使用 Xcode 6 或更高版本构建的

    应用的部署目标早于iOS 8

    大小类在故事板或 xib 中指定

    高度分量的值不紧凑

以上所有内容都适用于我的示例。

【问题讨论】:

您是否在重新运行之前从真机中删除了应用程序?有时情节提要文件没有被正确覆盖... 是的,从设备中删除并进行了干净的构建 如果您在 iOS 7.1 上使用 Universal Device Family 运行项目,然后切换到 iPad Device Family,它总是正确的,但这并不能解决问题。 是否可以使用通用情节提要并在项目部署设置中将目标设置为仅限 iPad?这样你就可以暂时避开这个可能的错误,而不必完全支持 iPhone。 我相信这正是我正在做的,我有一个通用的故事板,我将设备目标系列(在覆盖项目部署设置的目标部署设置中)设置为 iPad。当目标设备系列是目标“常规”选项卡或“构建设置”选项卡中的 iPad 时,会出现此问题 【参考方案1】:

我尝试比较在 xcode 构建文件夹中创建的中间文件,但据我所知,测试设备中没有依赖关系(这意味着只要我将部署目标设置为 7.1,它与什么平台无关最终将被部署) 所以我倾向于认为这不是 xcode 或 ios 7.1 中的错误,但实际上只是不向后兼容这个特定场景。

我向苹果技术支持提交了一个错误,但到目前为止没有得到他们的重播。 在这一点上,解决方法似乎是将所有Regular width 约束设置为Any width 并卸载Compact width 约束,一旦为iPhone 发布了应用程序,就撤消此更改。

【讨论】:

【参考方案2】:

模拟器 VS。设备? 我已经能够重现您在模拟器中报告的问题。

我认为您假设您的模拟器工作正常,因为它会产生您期望的输出,并且显示“错误”布局的是 iPad。然而,值得考虑的是 iPad 是否真的显示了您的配置的标准输出,即使该输出代表一个错误。 Xcode 中的 Storyboard 预览显示了配置的正确行为,但在 iPad 2 (7.1) 的模拟器中以及在运行 iOS 7.1 时其他 iPad 型号确实不正确。在模拟器中可以看到 iOS 8.x 的预期行为。因此,这不是模拟器与设备的问题。我怀疑你在模拟器中看到不同结果的原因只是你没有完成干净的构建,因为一些关键的变化导致了这个,所以它仍然使用旧的 XIB,因为这些缓存的时间比它们应该的时间长有时。

问题的原因? 您正在将项目的设备系列设置为仅针对 iPad,但在情节提要中包含Compact Width | Any Height 的大小类,这是 iPad 永远不应该使用的大小类。这可能是触发此问题的配置的一个方面。也就是说,它仍然不应该发生。这个问题在 Xcode 6.1 中都会出现,并且在当前的 6.2 beta 中没有什么不同。

您当前配置的某个特定方面可能会触发此问题。特别是,自动布局和设备目标会以一些记录在案但通常是开发人员意想不到的方式受到启动屏幕的影响。 (例如,使用故事板作为启动屏幕将默默地使您的应用程序普遍可用,即使您已在目标中指定它应该仅适用于 iPhone。)还有其他情况(请参阅this Stack Overflow question and answer)将启动图像迁移到不同的配置解决了类似的问题。所以这值得一试。

【讨论】:

嗨邓肯,我尝试按照您的建议迁移启动映像,按照您共享的链接,但它并没有解决我的问题

以上是关于IOS 7.1,如果目标设备系列设置为 iPad,通用情节提要上的常规宽度限制将被忽略的主要内容,如果未能解决你的问题,请参考以下文章

使用应用程序的目标设备为 iPad 设置图标是 iPhone

iOS 7.1 更新后 xibs 显示不正确

如何在 iPad 上运行 iPod 应用程序

iOS模拟器更改设备不起作用

NSEntityDescription 仅在 iPad Air 7.1 上返回 nil

如何在 iOS 7.1 中隐藏状态栏。在 iPad 上运行 iPhone 应用程序? [复制]