什么是XCode 8中的“性格变化”?

我正在使用AutoLayout和Size类,但随着iOS10和新的Xcode 8.0的发布,有一个新的选项Vary for Traits 。 这是不同的宽度和高度的设备的大小Classe的替代品。

在这里输入图像说明

通过selectwidthcheckbox,它显示varying 14 compact width devices

在这里输入图像说明

通过selectheightcheckbox,它显示varying 18 compact height devices

在这里输入图像说明

通过select这两个checkbox,它显示varying 11 compact width regular height devices

在这里输入图像说明

如何使用这个选项? 我们可以像Xcode7.0一样使用大小类的AutoLayout吗? 如果有任何深入的知识,请解释。

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

请阅读这个了解更多关于尺寸类。

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

在这里输入图像说明

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


  • 目标:

你需要一个在iPhone和iPad上有不同宽度的button。 前者宽度为80,后者宽度为300。

  • 方法1:

针对安装有多个约束的特征进行改变。

  • 脚步 :

    1. 首先添加常见约束,例如水平和垂直居中button。

在这里输入图像说明

  1. selectVaryForTraits和iPhone屏幕根据大小类的指导方针,一个C * R大小的类适合模型,这个我们检查在PopUp的宽度和高度的标记。 点击屏幕上的任意位置closurespopup窗口。

在这里输入图像说明 在这里输入图像说明

  1. 添加宽度常量并检查是否为C * R大小类添加约束。 添加约束后,select完成变化button。

在这里输入图像说明 在这里输入图像说明

  1. 对于iPad屏幕,再次select任何iPad设备,并selectVaryForTraits,这次点击高度宽度,它应该显示R * R变化。

在这里输入图像说明 在这里输入图像说明

  1. 再次添加一个宽度约束,最后添加的iPhone宽度约束必须如屏幕截图中所示。 这次增加的价值将是大小等级R * R。

在这里输入图像说明 在这里输入图像说明

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

在这里输入图像说明

结论:

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


  • 方法2:

对于具有单一约束的特征,安装了多个尺寸等级

  • 脚步 :
    1. 添加正常的宽度约束。 然后select该约束,并select恒定值以外的+button。

在这里输入图像说明

  1. 添加特性变化,对于iPhone我们selectC * R并将常数值设置为100。

在这里输入图像说明 在这里输入图像说明

  1. 同样,对于跟随R * R特性变化的iPad,我们通过再次点击+button添加另一个变化,并将值设置为300。

在这里输入图像说明 在这里输入图像说明

  1. select一个iPad,宽度将被自动取为300,并返回到iPhone需要100作为价值。

在这里输入图像说明

结论:

这似乎是一个更好的select,而不是添加两个约束时,只需要一个约束和常数值不同。

何时使用,如何使用:

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

但是,当您想要为设备添加一个约束或者说size-class时使用#Method1 。 例如,在iPhone中,button应该是来自Top 50点,并且在iPad中应该水平和垂直居中。 在这种情况下,您需要使用VaryForTraits,因为它打开了为特定大小类添加约束的大门。

当你想为同一个约束types使用不同的常量值时,使用方法2。

PS:所有那些不能得到正常工作的人

请确保您只添加了所需的约束条件为已安装。 对于“已安装”的checkbox应仅显示您需要的大小类的约束。 这是关键!

在这里输入图像说明

只需在视图中添加一个顶部约束和一个uiButton。 select顶部的约束,并取消加上加号的基本安装选项。 现在,通过点击加号,将变化添加到C R并检查该选项。 现在,使用各种方向组合将设备从iPhone更改为iPad。 这个约束只适用于iPhone纵向的 C R大小类。 如果勾选了基本的Installed(带有加号的那个)的checkbox,这意味着约束应该应用于所有大小类别。

总结:

特征变化是对基于设备configuration的用户界面演示文稿的更改。 特征用户界面的变化不仅限于约束,还可以应用于更多。 例如当设备设置为黑暗风格时,改变背景和其他元素的颜色。 变体可以应用于用户界面的元素,例如删除约束或视图类或约束的属性,例如标签的字体。 你可以改变:

  • 视图的大小或位置

  • 安装一个视图

  • 安装一个约束

  • 约束常量

  • 字形

  • 字体,色彩或背景的颜色

  • 布局边距

  • 图像文件

您可以改变的特定属性集取决于元素的类。 在这个例子中,我们演示了使用 – 安装一个约束& – 约束常量。 其他,很简单,可以很容易推断。

性格差异是Xcode过去版本中存在的尺寸类选项的演变。 它允许基于特征的更精妙和精确的变化。 当然,它不仅限于iPad / iPhone的变体,还可以指定基于方向和不同设备的变体。

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

注意:如果未启用“针对性状变化”选项,则所有布局和UI界面调整都会被引用到所有特征(即所有大小类别)。

图。1

让我们开始在故事板上放一个button。 由于“特性差异”没有启用,button将出现在所有不同的布局中。 如果相反,我们已经启用了不同的性状,button将只被引用特定的性状select。

fig2

现在,让我们启用“为特性而变化”,并根据高度select变化。 您应该看到底部屏幕会变成蓝色,根据select,您将看到所有受影响的设备。 到现在为止还挺好。

图三

再次select该button并添加通常的约束广告。 在我们的例子中,我们将添加顶部和左侧的领先空间以及宽度和高度。 之后,点击“完成改变”。 你会看到屏幕的底部会再次变成灰色。 正在发生的事情是,我们告诉Interface Builder仅为(w:C h:R)类添加上述约束。

图四

现在select屏幕底部的横向模式。 你会看到Button是红色的,因为它没有你添加的一些特性的限制。 再次select不同的性状,再select高度变化。 添加以下约束:

fig5

并按不同的做法。 现在这个button在横向和纵向上都可以很好的识别。

fig6

build立并运行。 您会看到该button将根据屏幕的方向而改变。

您可以按照此模式创build更高级的布局。 例如,您可以在开始时select性状变化,并仅为特定特征删除UIKit对象。 这个对象只会出现在指定的变体中,并且会在其他变体上变为灰色,从而允许您根据特性创build完全不同的用户界面。

这只不过是size classes自己,但具有不同的代表性。 直到xcode 7我们使用大小类,我们考虑regular,compact and any方式的height-width ,在vary for traits概念是相同的,但Xcode具体解释exact device 。 在旧版本中,我们知道, for every iphone in portraint等信息在这里我们可以知道确切的设备!

检查下面的屏幕截图,

在这里输入图像说明

在这里输入图像说明

你应该参考wwdc2016 – video了解更多信息!

参考: 这所以后