IOS 7.1,如果目标设备系列设置为iPad,则会忽略通用故事板上的常规宽度限制

时间:2014-11-13 16:38:01

标签: ios objective-c storyboard ios-universal-app size-classes

我在Xcode 6.1上开始了一个新的单一视图项目 转到我的目标并将设备系列设置为通用并将部署目标设置为7.1

在故事板中,我在尺寸等级Regular Width | Any Height中放置了一个红色标签 和大小等级Compact Width | Any Height

中的蓝色标签

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

现在我回到目标并将设备系列设置为IPad ,再次运行应用程序:

  1. 模拟器上的IPad 2(7.1) - 红色标签

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

  3. IPad 2(8.1)(真实设备) - 红色标签

  4. 同样适用于IPad Air / IPad mini和IOS 7.1的所有其他iPad我遇到了

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

    修改

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

    ,大小类就向后兼容
    1. 该应用程序是使用Xcode版本6或更高版本构建的

    2. 该应用的部署目标早于iOS 8

    3. 大小类在storyboard或xib中指定

    4. 高度组件的值不紧凑

    5. 以上所有内容均适用于我的例子。

2 个答案:

答案 0 :(得分:0)

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

我认为您假设您的模拟器工作正常,因为它会产生您期望的输出,并且正在显示“错误”布局的iPad。但是,值得考虑的是iPad是否实际显示了配置的标准输出,即使该输出代表了一个错误。 Xcode中的故事板预览显示了配置的正确行为,但在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)迁移启动图像到不同的配置已解决了类似的问题。所以这值得尝试。

答案 1 :(得分:0)

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

我提交了苹果技术支持的错误,但到目前为止还没有重播。 此时似乎解决方法是将所有Regular width约束设置为Any width并卸载Compact width约束,并且一旦为IPhone发布应用程序,请撤消此更改。