什么是Xcode 8中的"特征变化"?

tec*_*erd 79 ios ios-autolayout ios10 xcode8

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

Jen*_*ose 130

这只是如何在项目中快速使用"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 size-class添加了约束.添加约束后,选择Done Varying按钮.

在此输入图像描述 在此输入图像描述

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

在此输入图像描述 在此输入图像描述

  1. 再次添加宽度约束,最后添加的iPhone宽度约束必须在屏幕截图中不突出显示.这次添加的值将是大小等级R*R.

在此输入图像描述 在此输入图像描述

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

在此输入图像描述

结论:

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


  • 方法2:

对于具有单一约束的特征,安装了多个Size-Class,这些都有所不同

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

在此输入图像描述

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

在此输入图像描述 在此输入图像描述

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

在此输入图像描述 在此输入图像描述

  1. 选择一个iPad,宽度将自动取为300,并返回iPhone,它需要100作为值.

在此输入图像描述

结论:

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

何时使用,使用方法:

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

但是,如果要为设备添加约束或使用size-class ,则使用#Method1.例如,在iPhone中按钮应该来自前50个点,而在iPad中它应该水平和垂直居中.在这种情况下,您需要使用VaryForTraits,因为它打开了大门,为特定大小的类添加约束.

如果希望对同一约束类型使用不同的常量值,则使用#Method2.

PS:所有那些无法获得工作实例的人

请确保您只添加所需的约束作为已安装.针对Installed的复选框应仅针对大小类所需的约束显示.这是关键!

在此输入图像描述

只需在视图中添加一个顶部约束和一个uiButton.选择顶部约束并使用加号取消选中基本已安装选项.现在,通过单击加号,将变量添加到C R并检查该选项.现在,使用各种方向组合将设备从iPhone更改为iPad.此约束仅适用于纵向方向为iPhone的 C R大小类.如果选中了基本已安装的复选框(带有加号的符号),则表示该约束应适用于所有大小类.

摘要:

Trait Variation是对基于设备配置的用户界面表示的更改. 特征用户界面的变化不仅限于约束,还可以应用于更多.例如,当设备设置为暗色时,更改背景颜色和其他元素.变体可以应用于用户界面的元素,例如移除约束,或视图类或约束的属性,例如标签的字体.你可以改变:

  • 视图的大小或位置

  • 安装视图

  • 安装约束

  • 约束常数

  • 字形

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

  • 布局边距

  • 图像文件

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

  • 这对我不起作用..它更新了所有屏幕尺寸的限制,几乎没有任何反应...... (50认同)
  • 如果它不起作用,请尝试阅读:http://help.apple.com/xcode/mac/8.0/#/devba3dd0b51.如果要自定义字体或其他属性,请单击属性窗格中属性左侧的"+".例如,根据宽度,你不能改变iPhone 4s和iPhone 7 Plus的特性,因为它们都是紧凑的宽度.你可以为iPhone和iPad改变它们. (4认同)
  • 为我工作thnx :) (2认同)
  • 对于那些说这不起作用的人.我认为您正在尝试更改所有约束,您只能在约束中使用常量值,而您实际上无法更改约束的多个或其他属性.我也对这部分感到困惑. (2认同)

val*_*ine 20

对于特征的变化是过去版本的Xcode中出现的大小类选项的演变.它允许基于特征的更加漂亮和精确的变化.当然,它不仅限于iPad/iPhone版本,您还可以根据方向和不同设备指定变化.

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

注意:如果未启用"各种特性"选项,则所有布局和ui界面调整都会引用所有特征(即所有大小类).

图.1

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

fig2

现在,让我们启用"因性状而异"并根据身高选择变化.您应该看到底部屏幕将变为蓝色,根据选择,您将看到所有受影响的设备.到现在为止还挺好.

图三

再次选择按钮并添加通常的约束.在我们的示例中,我们将添加顶部和左侧前导空间以及宽度和高度.之后,点击"Done Varying".您将看到屏幕的底部将再次变为灰色.发生的事情是我们告诉Interface Builder只为(w:C h:R)类添加上述约束.

图四

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

fig5

并按完了变化.现在,按钮在屏幕上很好地识别出横向和纵向.

fig6

建立并运行.您将看到按钮将根据屏幕方向而改变.

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

  • 我已经为(wC,hR)类添加了约束,然后我点击完成了变化.当我打开(wR,hR)时,我也看到了旧约束.如何为(wR,hR)这个类创建新的约束.请告诉我@valvolin (3认同)

Lio*_*ion 8

它只不过size classes是自我,但具有不同的表现形式.直到xcode 7我们使用大小类,我们height-widthregular,compact and any方式上考虑,在vary for traits概念上是相同的,但xcode具体解释exact device.在旧版本我们知道其他for every iphone in portraint类型的信息,在这里我们可以知道确切的设备!

检查以下屏幕截图,

在此输入图像描述

在此输入图像描述

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

参考:这个帖子