我在iPhone 6 plus上遇到了一个奇怪的自动旋转问题(模拟器和实际设备)。
我用一个视图创建了一个全新的Xcode项目。它所拥有的只是初始视图控制器中的一些UI元素(具有适当的约束)。这是初次发布时的样子:
但有一次,我改变了设备方向,所有UI元素都消失了?!?!
在任何其他设备上都不会发生这种情况。
我在这里缺少什么?真的很感谢你的帮助。
答案 0 :(得分:1)
关于原始问题:您的自动布局约束的大小类似乎是错误的。这将导致您的视图在一个宽度/高度组合中呈现得很好,而在另一个宽度/高度组合中完全失败。设计任何大小类而不是any / any将导致Xcode底部的蓝色大小类栏指示/警告。
通常,您应为每个支持的大小类指定约束。最简单的方法是在任何/任何类中设计您的视图。这样,您的布局在所有配置上都是相同的。您可以仅为一个大小类更改指定的约束,只需选择该大小类并检查视图的约束,启用/禁用它们或添加新的约束。这些只会在特定的大小类中设置。要查看约束,您可以在故事板中选择它,也可以在它所属视图的大小检查器中双击它。约束的大小检查器中的最后一部分告诉它存在的大小类。
要将视图从一个大小的类迁移到另一个大小类只是意味着在每个视图和约束中更改此大小类...
手动方式
为此,您需要按+
复选框旁边的Installed
添加要迁移到的尺寸类,然后点击尺寸类左侧的小x
想从中迁移。如果您要迁移到any / any,请不要点击+
,只需勾选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
,反之亦然,这有点棘手。然后,您必须添加/删除要迁移到/来自的完整大小类部分。更多的工作,但仍然比手工操作容易得多。
但是,如果您的视图已包含多个大小类的大小类规范,则应该小心,只更改正确的大小类。