ios - Xcode 8 中的 'Vary for Traits' 是什么?

标签 ios xcode8 ios10 ios-autolayout

我正在使用 AutoLayout 和 Size 类,但是随着 iOS 10 和新 Xcode 8.0 的发布,有一个新选项 Vary for Traits 。这是针对不同宽度和高度的设备替换 Size Classe 吗?

enter image description here

通过选择 width 复选框,它显示 varying 14 compact width devices

enter image description here

通过选择 height 复选框,它显示 varying 18 compact height devices

enter image description here

通过选择两个复选框,它会显示 varying 11 compact width regular height devices

enter image description here

如何利用这个选项?
我们可以像 Xcode7.0 一样使用 AutoLayout 和 size classes 吗?
如果有人有深入的知识,那么请解释一下。

最佳答案

这只是关于如何在项目中快速使用“Vary Traits”为 iPad 和 iPhone 添加不同布局的扩展。

请阅读本文以了解有关 Size 类的更多信息。

https://developer.apple.com/reference/uikit/uitraitcollection

enter image description here

如果您要跳过下面的示例,请在最后阅读摘要。

  • 目标:

  • 你需要一个在 iPhone 和 iPad 上有不同宽度的按钮。前者宽度为 80,后者宽度为 300。
  • 方法 1:

  • 因安装时具有多个约束的特征而异。
  • 步骤:
  • 首先添加通用约束,如水平和垂直居中按钮。

  • enter image description here
  • 选择 V​​aryForTraits,对于 iPhone 屏幕,根据尺寸等级指南,C*R 尺寸等级适合模型,我们在弹出窗口中检查宽度和高度的刻度线。通过单击屏幕上的任意位置来关闭弹出窗口。

  • enter image description here
    enter image description here
  • 添加宽度常量并检查是否为 C*R size-class 添加了约束。添加约束后,选择 Done Varying 按钮。

  • enter image description here
    enter image description here
  • 对于 iPad 屏幕,再次选择任何 iPad 设备并选择 VaryForTraits,这次点击高度-宽度,它应该显示 R*R 变化。

  • enter image description here
    enter image description here
  • 再次添加宽度约束,最后添加的 iPhone 宽度约束必须像屏幕截图中那样不突出显示。这次增加的值将用于大小级别 R*R。

  • enter image description here
    enter image description here
  • 切换回 iPhone 布局,宽度取 80,iPad 取 300。

  • enter image description here

    结论:

    请注意,总共添加了两个约束,并且在这两个约束中,值根据选择的大小级别而有所不同。

  • 方法 2:

  • 具有单一约束的特征不同,安装了多个大小类
  • 步骤:
  • 添加正常宽度约束。然后选择该约束并选择 Constant 值旁边的 + 按钮。

  • enter image description here
  • 添加特征变异,iPhone选择C*R,设置常量为100。

  • enter image description here
    enter image description here
  • 再次对于遵循 R*R 特性变化的 iPad,我们通过再次单击 + 按钮添加另一个变化并将值设置为 300。

  • enter image description here
    enter image description here
  • 选择 iPad,宽度将自动设为 300,回到 iPhone 时,宽度将设为 100。

  • enter image description here

    结论:

    当只需要一个约束并且常量值不同时,这似乎是一个更好的选择,而不是添加两个约束。

    何时使用,使用什么:

    这两种方法基本上都在做同样的事情,将值设置为 Size-classes。

    但是, #Method1 用于为设备添加约束或说尺寸等级。例如,在 iPhone 中,按钮应该来自前 50 分,而在 iPad 中,它应该水平和垂直居中。在这种情况下,您需要使用 VaryForTraits,因为它打开了为特定尺寸类添加约束的大门。

    #Method2 用于相同约束类型的不同常量值。

    P.S:致所有无法使示例工作的人

    请确保您仅添加所需的约束作为已安装。安装的复选框应该只出现在你需要的尺寸类的约束中。这就是关键!

    enter image description here

    只需在 View 中添加一个顶部约束和一个导向 uiButton 即可。选择顶部约束并取消选中带加号的基本安装选项。现在,通过单击加号,向 CR 添加变化并选中该选项。现在,使用各种方向组合将设备从 iPhone 更改为 iPad。此约束仅适用于纵向方向的 iPhone CR 尺寸类别。如果选中了基本 Installed(带有加号的那个)的复选框,则意味着该约束应应用于所有尺寸类别。

    摘要:

    Trait Variation 是对基于设备配置的用户界面呈现的更改。用户界面的特征变化不仅限于约束,而且可以应用于更多。例如在设备设置为深色样式时更改背景和其他元素的颜色。变体可以应用于用户界面的元素,例如移除约束,或应用于 View 类或约束的属性,例如标签的字体。你可以改变:
  • View 的大小或位置
  • 安装 View
  • 安装约束
  • 约束常数
  • 字体
  • 字体、色调或背景的颜色
  • 布局边距
  • 图像文件

  • 您可以改变的特定属性集取决于元素的类。在示例中,我们已经演示了使用 - 安装约束和 - 约束常量。其他的,很简单,可以很容易地推断出来。

    关于ios - Xcode 8 中的 'Vary for Traits' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890055/

    相关文章:

    ios - 检查有效的希伯来语正则表达式总是返回 YES

    ios - KIK 无法识别 IOS 8.1.1.1

    iphone - 我应该在哪里执行可达性检查?

    ios - Cordova 应用程序在 iOS 10 启动期间挂起

    core-data - 适用于 iOS 8,9 的 Xcode 8 核心数据模板

    ios - 错误 : received error: [57] Socket is not connected - iOS 10

    java - 应用程序卡在套接字上,无法在服务器端读取客户端数据

    ios - Xcode:没有一个输入目录包含匹配的应用程序图标/启动图像集

    ios - "automatically adjusts font requires using a dynamic type text style"警告是什么意思?

    ios - 异构集合文字只能推断为 '[String : Any]' ;如果这是有意的,请添加显式类型注释