https://developer.apple.com/reference/uikit/uitraitcollection
如果您跳过下面的示例,请务必阅读结尾的摘要。您需要一个在iPhone和iPad上宽度不同的按钮。前者宽度为80,后者宽度为300。
安装“识别特征有多个约束条件”的功能。
步骤:
结论:
请注意,总共添加了两个约束条件,并且在这两个约束条件中,值根据所选择的大小类别而异。
针对具有单一约束条件和多个尺寸类别的特征进行变化
结论:
与其添加两个约束条件,当只需要一个约束条件且常量值不同时,这似乎是更好的选择。
何时使用,使用什么:
这两种方法基本上都是在为Size-classes设置值,但是#Method1用于当您想要为特定设备或大小类别添加约束时。例如,在iPhone中,按钮应该从顶部50个点开始,在iPad中应该水平和垂直居中。在这种情况下,您需要使用VaryForTraits,因为它为特定的大小类别添加约束打开了大门。
#Method2用于当您需要相同约束类型的不同常量值时。
P.S :对于那些无法使示例工作的人
请确保您仅将所需的约束条件添加为已安装。已安装的复选框应仅出现在您需要的大小类别的约束条件旁边。这是关键!
只需在视图中向uiButton添加顶部和前导约束。选择顶部约束并取消勾选带有加号的基本安装选项。现在,通过单击加号,为C摘要:特征变化是基于设备配置的用户界面呈现的更改。用户界面的特征变化不仅限于约束,还可以应用于其他许多方面,例如当设备设置为暗样式时更改背景颜色和其他元素。变化可以应用于用户界面的元素,例如删除约束,也可以应用于视图类或约束的属性,例如标签的字体。您可以变化:视图的大小或位置
视图的安装
约束的安装
约束常量
字体
字体、色调或背景的颜色
布局边距
图像文件
您可以变化的特定属性取决于元素的类。在示例中,我们演示了使用- 约束的安装 和 - 约束常量。其他属性相当简单,可以轻松推断。
变量的特征是Xcode先前版本中存在的尺寸类别进化选项。它允许基于特征进行更为巧妙和精确的变化。当然,它不仅限于iPad/iPhone上的变异,还可以指定基于方向和不同设备的变异。
此线程中的其他答案存在一些缺陷和不准确之处,也许最有效的方法是做一个示例。为了清晰起见,我们将把示例限制在一个按钮和两个布局上。但是,如下所述,您可以根据需要扩展以下示例。我们的目标是在所有设备上调整按钮在两种不同布局(横屏和竖屏)之间的位置。
注意:如果未启用“变量的特征”选项,则所有布局和用户界面调整都将涉及到所有特征(即所有尺寸类别)。
让我们从在storyboard中放置一个按钮开始。由于未启用“变量的特征”,该按钮将出现在所有不同的布局中。如果我们启用了变量的特征,则该按钮仅适用于所选特征。
现在,让我们启用“变量的特征”并选择基于高度的变异。您应该看到底部屏幕将变为蓝色,并根据所选内容显示所有受影响的设备。目前为止,一切都很好。
再次选择按钮并像往常一样添加约束条件。在我们的示例中,我们将添加顶部和左侧空间以及宽度和高度。之后,点击“完成变化”。您会看到屏幕底部的部分再次变为灰色。发生的情况是,我们告诉Interface Builder仅为(w:C h:R)类添加上述约束条件。
现在在屏幕底部选择横向模式。您会看到按钮是红色的,因为它缺少您仅为某些特征添加的约束条件。重新选择变量类型,然后再次选择高度变化。添加以下约束:
然后按“完成变化”。现在,按钮在横向和纵向屏幕上都可以正确显示。
构建并运行。您会看到按钮会根据屏幕方向而改变。
您可以按照此模式创建更高级的布局。例如,您可以在一开始选择特征变量,并仅针对特定特征放置UIKit对象。该对象仅存在于指定的变体中,并在其他变体中变灰,让您可以基于特征创建完全不同的用户界面。
大小类
本身,但具有不同的表示形式。在xcode 7
之前,我们使用大小类,并考虑常规,紧凑和任意
方式中的高度-宽度
,在变化特征
的概念相同,但xcode明确解释了确切设备
。在旧版本中,我们知道为每个iphone在纵向
等信息,在这个版本中我们可以知道确切的设备!如果需要更多信息,您可以参考wwdc2016 - video!
参考资料:这个Stack Overflow帖子