【问题标题】:What is the proper way to use Size Class in XCode?在 XCode 中使用 Size Class 的正确方法是什么?
【发布时间】:2016-04-07 21:00:51
【问题描述】:

我在 Any Width, Any Height 尺寸类中开始了一个项目,其中一个场景有几个 UI 元素(超过 10 个)。最近我想为 Any With、Compact Height 尺寸类更改此场景的布局(适用于横向 iPhone)。而且我找不到合适的方法来管理它。

最后,我不得不删除 Any Width、Any Height 中的所有 UI 元素,然后为该场景的所有元素创建两个副本,一个用于 Any Width、Compact Height,另一个用于 Any Width, 常规高度。所以Any,Any中的场景实际上变成了空白。但我觉得这一定不是正确的方法。

这是一个例子:

我从“任意宽度”、“任意高度”开始,并放置了两个标签(一个在另一个之上)来填充屏幕。

任何宽度,任何高度。约束设置。

任何宽度,紧凑高度,具有任何宽度,任何高度的约束

现在对于横屏的 iPhone,我想移动标签,使它们并排,所以首先,在 XCode 的底部,我更改为 wAny hCompact,然后拖动并调整标签的大小,使它们并排旁边。在添加其他约束之前,它如下所示。

请注意,文档大纲中突出显示的约束来自 Any Width、Any Height,并且它们都应用于 Any Width、Compact Height。

任意宽度,紧凑高度。卸载任意宽度、任意高度的约束

所以我卸载了这些约束

任意宽度,紧凑高度。添加了自己的约束

然后我为当前尺寸类添加了约束,任何宽度,紧凑高度

任何宽度,任何高度。现在没有约束,Xcode 抛出错误和警告

回到 Any Width, Any Height 尺寸类,因为我卸载了约束,所以没有应用约束。但是如果我重新添加约束,任何宽度、紧凑高度都会受到影响。

所以我安装了所有的约束,最初是从任意宽度、任意高度到任意宽度、常规高度。这将使项目运行,并且屏幕将在纵向和横向上正确显示。

但是,在 Any Width, Any Height 中,仍然没有约束,XCode 会抛出警告

就像我说的那样,我最终删除了该场景的 Any Width、Any Height 中的所有 UI 元素,然后在 Any Width、Compact Height 和 Any Width、Regular Height 中各创建一个版本。还必须为每一个创建出口和行动。

每次我想使用另一个尺寸类时,我应该如何在不创建一组单独的 UI 元素(并且不通过控件拖动来创建出口和操作)的情况下执行此操作?

【问题讨论】:

    标签: ios xcode autolayout size-classes


    【解决方案1】:

    为了实现你想要的,你需要管理两组约束。

    一组用于Any,Any 类,另一组用于Any,Compact 类。

    诀窍是确保在该类中专门卸载给定大小类不需要的约束 - 我将在下面向您展示我的意思。

    Any,Any 大小的约束将是:

    • 标签 1

      • 前导空间到超级视图 = 0
      • 到超级视图的尾随空格 = 0
      • 顶部布局指南的顶部空间 = 0
      • 标签 2 的底部空间 = 0
      • 与标签 2 等高 = 0
    • 标签 2

      • 前导空间到超级视图 = 0
      • 到超级视图的尾随空格 = 0
      • 底部空间到底部布局指南 = 0
      • 标签 1 的顶部空间 = 0
      • 与标签 1 等高 = 0

    您的标签 1 约束应该与您的标签 2 约束类似:

    现在,选择Any,Compact 类并调整两个标签位置并添加以下约束:

    • 标签 1

      • 底部空间到底部布局指南 = 0
      • label2 的后缘到前缘 = 0
      • 与标签 2 等宽
    • 标签 2

      • 顶部布局指南的顶部空间 = 0
      • label1 的前缘到后缘 = 0
      • 与标签 1 等宽

    现在,通过双击约束关闭Any,Compact 中不必要的约束,单击“+”添加Any,Compact,然后清除复选框,如下所示:

    Any,Compact 的不必要限制是:

    • 标签 1

      • 超级视图的尾随空间
      • 标签 2 的底部空间
      • 与标签 2 等高
    • 标签 2

      • 引领空间到superview
      • 标签 1 的顶部空间
      • 与标签 1 等高

    现在,回到Any,Any 类,以同样的方式关闭Any,Any 的不必要约束

    Any,Any 的不必要限制是:

    • 标签 1

      • 尾随空格标签 2
      • 底部空间到底部布局指南
      • 与标签 2 等宽
    • 标签 2

      • 标签 1 的前导空格
      • 顶部空间到顶部布局指南
      • 与标签 1 等宽

    现在,您应该能够在 Any,AnyAny, Compact 之间进行交换,并将标签移动到正确的位置。

    我在这里上传了一个带有适当约束的故事板:https://gist.github.com/paulw11/f1b0faa229b152f1c53dadefcf9e0885

    更新:我刚刚注意到您的标签之间的空间不是 0,但您可以根据需要调整前导/尾随和顶部/底部约束。

    【讨论】:

    • 终于有机会试试你的解决方案,效果很好!谢谢
    猜你喜欢
    • 2012-08-22
    • 2011-02-19
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多