如何在使用不同大小的类时修复wAny hAny的缺失/冲突约束

时间:2015-10-05 06:57:11

标签: ios interface-builder constraints size-classes

我想要实现的目标

我想要为所有常规高度垂直排列两个相等高度的视图。但是,对于Compact Heights,我希望水平排列视图。如下图所示:

enter image description here

为此,我在wAny-hAny size类中添加了适用于所有内容的一般约束。然后我为wAny-hRegular和wAny-hCompact大小类添加了特定的约束。这适用于wAny-hRegular和wAny-hCompact(以及在模拟器中测试应用程序),但它让我在wAny-hAny中缺少约束。如果我在wAny-hAny中添加那些缺少的约束,那么我在wAny-hRegular或wAny-hCompact中得到冲突的约束。我不知道如何摆脱错误。

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

我是怎么做的

通过执行以下步骤,我能够在模拟器中获得一些功能。

wAny hAny

enter image description here

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

enter image description here

也就是说,我将蓝色固定在顶部和左侧,我将红色固定在右侧和底部。无论使用什么大小的类,总是需要这些约束。

wAny hRegular

enter image description here

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

enter image description here

也就是说,我将蓝色固定在右侧,红色固定在左侧。我还把红色的顶边固定在蓝色的底边。而我的红色和蓝色相等。这解决了常规高度的所有约束问题。

wAny hCompact

enter image description here

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

enter image description here

也就是说,我将蓝色固定在底部,红色固定在顶部。我还将红色的右边缘固定在蓝色的左边缘。我做了红色和蓝色相等的宽度。这样可以解决Compact Height的所有约束问题。

问题

通过上面的设置,一切都可以在故事板预览中看到(请参见上面的第一张图片),并且在我测试过的所有尺寸的模拟器中都能正常工作。

但是,在Interface Builder中,我收到了wAny hAny Size Class的以下Missing Constraint错误:

enter image description here

这有点像catch-22,因为如果我尝试添加缺少的约束,那么我会使用Regular或Compact Size Class约束创建冲突的约束。以Compact为例:

enter image description here

如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

我认为您只需要为wAny-hCompact大小类添加特定约束。并确保正确安装了特殊约束。

见下图。

enter image description here

答案 1 :(得分:4)

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

你可以这样做:

步骤:

  1. 如果公用设施区域未打开,请选择查看>公用事业>显示实用程序。
  2. 选择包含您要更改的约束的视图。
  3. 选择要安装或卸载的约束。 Constraint检查器在实用程序区域中打开。
  4. 在Constraint检查器中,单击Installed属性旁边的Add按钮(+),然后从弹出菜单中选择所需大小的类。
  5. enter image description here

    从弹出菜单中选择大小类后,Constraint检查器中将显示该大小类的新条目项。

    enter image description here

    注意:如果已存在所需尺寸类的现有条目项,请跳过此步骤。

    1. 选中所需输入行的复选框以安装该大小类的约束。取消选中该复选框以卸载约束。
    2. 仍会创建已卸载约束的运行时对象。但是,它不包含在视图层次结构中。

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

      您可以找到关于此apple document on installing and uninstalling constraint for size classes的详细说明。

答案 2 :(得分:1)

借助xcode 7及以上版本提供的UIStackView,您可以轻松实现所需。

Apple Documentation of UIStackView

A good Tutorial on UIStackView