2015-10-05 64 views
6

当我试图实现

我想对所有普通高地垂直排列的高度相等的两个视图来修复丢失/冲突的约束为温妮HANY。但是,对于Compact Heights,我希望水平排列视图。这是如下图所示:如何使用不同尺寸的类

enter image description here

要做到这一点,我在适用于一切温妮 - 哈尼尺寸级别添加一般的约束。然后我为wAny-hRegular和wAny-hCompact大小类添加了特定约束。这对wAny-hRegular和wAny-hCompact(以及用于在模拟器中测试应用程序)的工作正常,但它在wAny-hAny中留下了缺少约束条件。如果我在wAny-hAny中添加这些缺失的约束,那么我会在wAny-hRegular或wAny-hCompact中得到冲突约束。我不知道如何摆脱错误。

下面是对我所做的更详细的解释。

我如何试图做到这一点

我能得到的东西,通过执行以下步骤在模拟器中工作。

温妮HANY

enter image description here

对于任何宽度任何高度我设置了以下4个约束:

enter image description here

也就是说,我寄托蓝色顶部和左,我把红色固定在右边和底部。无论使用什么尺寸的类,总是需要这些约束。

温妮hRegular

enter image description here

对于任何宽度常规高度我增加了以下4个约束:

enter image description here

也就是说,我寄托蓝色的权利和红色左边。我还将红色的上边缘固定在蓝色的底边。我做了红蓝相等的高度。这解决了常规高度的所有约束问题。

温妮hCompact

enter image description here

对于任何宽度紧凑高度I增加了以下4个约束:

enter image description here

即,我钉扎蓝色至底部和红色到顶端。我也把红色的右边缘固定在蓝色的左边缘。我做了红色和蓝色的等宽。这需要处理紧凑高度的所有约束问题。

的问题

通过以上的设置一切正常,因为它应该在故事板预览(见上第一图像),并在模拟器,我测试了所有尺寸。

然而,在界面生成器,我得到以下缺失约束错误的温妮HANY尺寸级别:

enter image description here

这是一个有点左右为难,因为如果我尝试添加缺少的约束然后我创建冲突的规则或紧凑尺寸类约束。下面是紧凑型为例:

enter image description here

我该如何解决这个问题?

回答

5

我想你只需要为wAny-hCompact大小类添加特定的约束。并确保特殊限制已正确安装。

看到下面的图片。

enter image description here

+1

你说得对。我只需要在AnyAny中设置所有约束,然后在AnyCompact中添加特殊约束。之后,我卸载AnyCompact中冲突的约束。为了卸载约束,我必须更多地学习@ AkshaySunderwani的答案(即文档)。我不能只是取消选择“安装”,因为它会为每个大小类别卸载它。我必须在约束检查器中添加特定的大小类(AnyCompact),然后将其卸载。 – Suragch

4

这是因为对于两个不同大小的类中的单个视图有两种不同的约束。因此,在使用不同的Size Classes时,尝试从wAny hAny size类中卸载额外的约束,这些约束类都是在wAny hCompact或任何其他大小类中添加的,因此,修复了wAny hAny的缺失/冲突约束问题。

你可以这样说:

步骤:

  1. 如果公用事业领域不开放,选择View>工具>显示工具。
  2. 选择包含要更改的约束的视图。
  3. 选择您想要安装或卸载的约束。约束检查器在公用程序区域中打开。
  4. 在“约束”检查器中,单击“已安装”属性旁边的添加按钮(+),然后从弹出菜单中选择所需的类大小。

​​

从弹出菜单中选择一个尺寸级别后,该尺寸类的新条目项出现在约束检查。

enter image description here

注意:如果已经有针对所需的尺寸类别的现有项项目,跳过此步骤。

  1. 选中所需条目行的复选框以安装该大小类的约束条件。取消选择复选框以卸载约束。

尚未创建卸载约束的运行时对象。但是,它不包含在视图层次结构中。

约束检查器显示一个或多个条目项目,显示约束是否为尺寸等级安装。大小类的每个输入行都以一个删除按钮(x)开头,后跟大小类,然后是一个选择复选框。显示宽度(w)和高度(h)的尺寸等级。C用于紧凑尺寸类,R用于常规尺寸类,Any用于任何尺寸类。

你可以在这apple document on installing and uninstalling constraint for size classes找到详细的解释。

1

所有你需要的可以与UIStackView的帮助,可以从Xcode的7及以上的可以轻松实现。

Apple Documentation of UIStackView

A good Tutorial on UIStackView

+0

这些对于'UIStackView'来说是一些很好的链接,并且可以很容易地单独进行垂直布局或水平布局。但是,根据设备的大小和方向,Stack View将如何自动从垂直变为水平(或反之亦然),这并不是显而易见的。你能否填写你的答案多一点? – Suragch