什么是XCode 8中的“性格变化”?
我正在使用AutoLayout和Size类,但随着iOS10和新的Xcode 8.0的发布,有一个新的选项Vary for Traits
。 这是不同的宽度和高度的设备的大小Classe的替代品。
通过selectwidth
checkbox,它显示varying 14 compact width devices
。
通过selectheight
checkbox,它显示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:
针对安装有多个约束的特征进行改变。
-
脚步 :
- 首先添加常见约束,例如水平和垂直居中button。
- selectVaryForTraits和iPhone屏幕根据大小类的指导方针,一个C * R大小的类适合模型,这个我们检查在PopUp的宽度和高度的标记。 点击屏幕上的任意位置closurespopup窗口。
- 添加宽度常量并检查是否为C * R大小类添加约束。 添加约束后,select完成变化button。
- 对于iPad屏幕,再次select任何iPad设备,并selectVaryForTraits,这次点击高度宽度,它应该显示R * R变化。
- 再次添加一个宽度约束,最后添加的iPhone宽度约束必须如屏幕截图中所示。 这次增加的价值将是大小等级R * R。
- 切换回iPhone布局,宽度为80,iPad需要300。
结论:
请注意,总共添加了两个约束条件,并且在两个约束条件中,值根据所选的大小等级而不同。
- 方法2:
对于具有单一约束的特征,安装了多个尺寸等级
- 脚步 :
- 添加正常的宽度约束。 然后select该约束,并select恒定值以外的+button。
- 添加特性变化,对于iPhone我们selectC * R并将常数值设置为100。
- 同样,对于跟随R * R特性变化的iPad,我们通过再次点击+button添加另一个变化,并将值设置为300。
- 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界面调整都会被引用到所有特征(即所有大小类别)。
让我们开始在故事板上放一个button。 由于“特性差异”没有启用,button将出现在所有不同的布局中。 如果相反,我们已经启用了不同的性状,button将只被引用特定的性状select。
现在,让我们启用“为特性而变化”,并根据高度select变化。 您应该看到底部屏幕会变成蓝色,根据select,您将看到所有受影响的设备。 到现在为止还挺好。
再次select该button并添加通常的约束广告。 在我们的例子中,我们将添加顶部和左侧的领先空间以及宽度和高度。 之后,点击“完成改变”。 你会看到屏幕的底部会再次变成灰色。 正在发生的事情是,我们告诉Interface Builder仅为(w:C h:R)类添加上述约束。
现在select屏幕底部的横向模式。 你会看到Button是红色的,因为它没有你添加的一些特性的限制。 再次select不同的性状,再select高度变化。 添加以下约束:
并按不同的做法。 现在这个button在横向和纵向上都可以很好的识别。
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了解更多信息!
参考: 这所以后
- setNeedsLayout vs setNeedsUpdateConstraints和layoutIfNeeded vs updateConstraintsIfNeeded
- 如何从Xcode中删除configuration文件
- 如何提高自定义OpenGL ES 2.0深度纹理生成的性能?
- IOS项目显示错误“发生内部错误。 编辑function可能会受到限制“在xcode 7.1上
- iOS 7圆形框架button
- 在iPhone应用程序中使用RestKit的最佳方法
- iOS PNG图像旋转了90度
- 如何使用自动布局创build总宽度的百分比?
- 赛段之间有什么区别:“显示”,“显示细节”,“模态呈现”,“呈现为popover”?