【问题标题】:iPhone 6 Plus Autorotation IssueiPhone 6 Plus 自动旋转问题
【发布时间】:2015-04-03 01:41:26
【问题描述】:

我在 iPhone 6 plus 上遇到了一个奇怪的自动旋转问题(模拟器和实际设备)。

我创建了一个带有单一视图的全新 Xcode 项目。它所拥有的只是初始视图控制器中的一些 UI 元素(具有适当的约束)。这是首次发布时的样子:

但是一旦我改变了设备方向,所有的 UI 元素都消失了?!?!

这不会发生在任何其他设备上。

我在这里缺少什么?非常感谢您的帮助。

【问题讨论】:

  • 你确定你的约束都是有效的并且在正确的尺寸等级中吗?
  • 大概就是这样。让我研究一下。
  • 就是这样!我使用的是“紧凑/任意”尺寸类。一旦我在“任何/任何”尺寸类中重新创建了视图,问题就得到了解决。如果您想发布您的解决方案作为答案,我很乐意接受。
  • 另外,相关问题,是否有任何简单的方法可以将视图从一种尺寸等级迁移到另一种尺寸等级?谢谢!
  • 我下班回家就做。我会检查迁移技术...

标签: ios objective-c iphone ios8 autorotate


【解决方案1】:

关于原始问题:您的自动布局约束的大小类似乎是错误的。这将导致您的视图以一种宽度/高度组合呈现,而另一种则完全失败。在任何/任何以外的任何尺寸类别中进行设计都会导致 Xcode 底部的蓝色尺寸类别栏指示/警告。

一般来说,您应该为每个支持的尺寸类别指定约束。最简单的方法是在 any/any 类中设计您的视图。这样,您的布局在所有配置上都是相同的。您可以仅更改一个尺寸类的指定约束,也可以选择该尺寸类并检查视图的约束,启用/禁用它们或添加新的约束。这些只会设置在那个特定的尺寸等级中。要查看约束,您可以在情节提要中选择它,或者在它所属的视图的大小检查器中双击它。约束的尺寸检查器的最后一部分说明它存在于哪些尺寸类别中。

将视图从一个尺寸等级迁移到另一个只是意味着在每个视图和约束上更改此尺寸等级...

手动方式
为此,您需要通过按Installed 复选框旁边的+ 添加要迁移到的尺寸等级,然后单击要从中迁移的尺寸等级左侧的小x。如果您想迁移到任何/任何,请不要点击+,只需勾选Installed 旁边的复选框即可。 不要忘记更改视图对象本身的大小类。如果你不这样做,视图将不会出现在所需的大小类中。

自动方式
这也可以通过查看 Storyboard 文件的源代码进行更改。约束设置可能如下所示

<variation key="default">
    <mask key="subviews">
        <exclude reference="fTD-HZ-ZT3"/>
    </mask>
    <mask key="constraints">
        <exclude reference="eyr-oK-LvV"/>
    </mask>
</variation>
<variation key="heightClass=compact-widthClass=regular">
    <mask key="subviews">
        <include reference="fTD-HZ-ZT3"/>
    </mask>
    <mask key="constraints">
        <include reference="eyr-oK-LvV"/>
    </mask>
</variation>

变体项中的key 属性显然指定了尺寸等级。 Default 表示任何/任何。只需搜索所有出现的要从中迁移的尺寸类别并将其替换为要迁移到的尺寸类别会容易得多。如果您要从或迁移到默认类,这有点棘手,因为您必须将exclude 更改为include,反之亦然。然后,您必须添加/删除要迁移到/从中迁移的完整大小类部分。多一点工作,但仍然比手工操作容易得多。
但是,如果您的视图已经包含多个尺寸类别的尺寸类别规范,那么您应该小心,以便仅更改正确的尺寸类别。

【讨论】:

  • 非常感谢您的详细解释。我会试试看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
相关资源
最近更新 更多