【问题标题】:What is 'Vary for Traits' in Xcode 8?Xcode 8 中的“因特征而异”是什么?
【发布时间】:2017-02-14 20:21:28
【问题描述】:

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

选中width复选框,显示varying 14 compact width devices

选中height复选框,显示varying 18 compact height devices

选中这两个复选框,它会显示varying 11 compact width regular height devices

如何使用这个选项? 我们可以将 AutoLayout 与 Xcode7.0 等大小类一起使用吗? 如果有人有深入的知识,请解释一下。

【问题讨论】:

  • 观看 WWDC 2016 会议视频。我确信这在某处被称为“Xcode 的新功能”。

标签: ios xcode8 ios10 ios-autolayout


【解决方案1】:

它只是 size classes 它本身,但具有不同的表示。直到xcode 7,我们使用了大小类,我们以regular,compact and any 的方式考虑height-widthvary for traits 的概念是相同的,但 xcode 专门解释了exact device。在旧版本中,我们知道for every iphone in portraint 等类型的信息,在这些信息中我们可以知道确切的设备!

查看以下屏幕截图,

您应该参考wwdc2016 - video 了解更多信息!

参考:This So Post

【讨论】:

  • 好的,让我看看 WWDC 视频。
  • 你是对的,它只不过是尺寸等级的演变
【解决方案2】:

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

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

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

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


  • 目标:

您需要一个在 iPhone 和 iPad 中具有不同宽度的按钮。前者宽80,后者宽300。

  • 方法 1:

因安装了多个约束的特征而异。

  • 步骤:

    1. 首先添加常用约束,例如将按钮水平和垂直居中。

  1. 根据尺寸等级指南选择 VaryForTraits 和 iPhone 屏幕,C*R 尺寸等级适合模型,我们在 PopUp 中检查宽度和高度的刻度。单击屏幕上的任意位置关闭弹出窗口。

  1. 添加宽度常量并检查是否为 C*R 尺寸等级添加了约束。添加约束后,选择 Done Varying 按钮。

  1. 对于 iPad 屏幕,再次选择任何 iPad 设备并选择 VaryForTraits,这一次单击 height-width,它应该显示 R*R 变化。

  1. 再次添加宽度约束,最后添加的 iPhone 宽度约束必须像屏幕截图中那样不突出显示。这次增加的价值将是尺寸级别的 R*R。

  1. 切换回 iPhone 布局,宽度为 80,iPad 为 300。

结论:

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


  • 方法 2:

因安装了单一约束、多个 Size-Class 的特征而异

  • 步骤:
    1. 添加正常宽度约束。然后选择该约束并选择常量值旁边的 + 按钮。

  1. 添加特征变异,对于 iPhone 我们选择 C*R 并将常量值设置为 100。

  1. 对于遵循 R*R 特征变体的 iPad,我们再次单击 + 按钮添加另一个变体并将值设置为 300。

  1. 选择一台iPad,宽度将自动取为300,返回iPhone时取100作为值。

结论:

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

何时使用,使用什么:

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

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

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

P.S :致所有无法让示例运行的人

请确保您只添加了已安装所需的约束。对 Installed 的复选框应该只针对您需要的尺寸等级的约束出现。这才是关键!

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

总结:

Trait Variation 是对基于设备配置的用户界面呈现方式的更改。 用户界面的 Trait Variations 不仅限于约束,还可以应用于更多方面。例如在设备设置为深色样式时更改背景和其他元素的颜色。变体可以应用于用户界面的元素,例如删除约束,或者应用于视图类或约束的属性,例如标签的字体。你可以改变:

  • 视图的大小或位置

  • 安装视图

  • 安装约束

  • 约束常数

  • 字体

  • 字体、色调或背景的颜色

  • 版面边距

  • 图像文件

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

【讨论】:

  • 这对我不起作用..它更新了所有屏幕尺寸的约束,几乎没有任何反应......
  • 如果它不起作用,请尝试阅读:help.apple.com/xcode/mac/8.0/#/devba3dd0b51。如果要自定义字体或其他属性,请单击属性窗格中属性左侧的“+”。你不能改变 iPhone 4s 和 iPhone 7 Plus 的特性,例如,取决于宽度,因为它们都是紧凑的宽度。您可以为 iPhone 和 iPad 改变它们。
  • 为我工作 thnx :)
  • 在我删除旧约束并添加新约束后,它确实对我有用,而不是替换它的值。
  • 对于那些说这不起作用的人。我认为您正在尝试更改所有约束,您只能更改约束中的常量值,而实际上无法更改约束的多个或其他属性。这部分我也很困惑。
【解决方案3】:

Vary for traits 是 Xcode 过去版本中存在的 size classes 选项的演变。它允许基于特征的更漂亮和精确的变化。当然,它不仅限于 iPad/iPhone 的变体,您还可以根据方向和不同的设备指定变体。

这个帖子中的其他答案有一些不足和不准确,也许给出答案的最有效方法是举一个例子。为了清楚起见,我们将示例限制为仅一个按钮和两个布局。但是,如下所述,您可以根据需要扩展以下示例。我们的目标是在两种不同布局之间调整按钮的位置:所有设备上的横向和纵向。

注意:如果未启用“因特征而异”选项,则所有布局和 ui 界面调整均参考所有特征(即所有尺寸类)。

让我们首先在故事板上放置一个按钮。由于未启用“因特征而异”,因此该按钮将出现在所有不同的布局中。相反,如果我们为特征启用了变化,则按钮将仅引用所选的特定特征。

现在,让我们启用“因特征而异”并根据身高选择变体。您应该看到底部屏幕将变为蓝色,并且根据您的选择,您将看到所有受影响的设备。到目前为止,一切都很好。

再次选择按钮并像往常一样添加约束。在我们的示例中,我们将添加顶部和左侧前导空格以及宽度和高度。之后,单击“完成变化”。您将看到屏幕的底部将再次变为灰色。发生的事情是我们已经告诉 Interface Builder 只为 (w:C h:R) 类添加上述约束。

现在选择屏幕底部的横向模式。您将看到 Button 为红色,因为它缺少您仅为某些特征添加的约束。再次为特征选择变化并再次选择高度变化。添加以下约束:

然后按完成变化。现在,无论横向还是纵向,屏幕上的按钮都可以很好地识别出来。

构建并运行。您会看到按钮会根据屏幕的方向发生变化。

您可以按照此模式创建更高级的布局。例如,您可以在开始时为特征选择一个变量,并仅为特定特征删除 UIKit 对象。此对象将仅在指定的变体中出现,并且在其他变体中显示为灰色,允许您根据特征创建完全不同的用户界面。

【讨论】:

  • 我已经为 (wC,hR) 类添加了约束,然后我点击了完成变化。当我打开 (wR,hR) 时,我也看到了旧的约束。如何为(wR,hR)这个类创建新的约束。请告诉我@valvolin
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 2021-09-15
  • 2011-09-11
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
相关资源
最近更新 更多