我想要为所有常规高度垂直排列两个相等高度的视图。但是,对于Compact Heights,我希望水平排列视图。如下图所示:
为此,我在wAny-hAny size类中添加了适用于所有内容的一般约束。然后我为wAny-hRegular和wAny-hCompact大小类添加了特定的约束。这适用于wAny-hRegular和wAny-hCompact(以及在模拟器中测试应用程序),但它让我在wAny-hAny中缺少约束。如果我在wAny-hAny中添加那些缺少的约束,那么我在wAny-hRegular或wAny-hCompact中得到冲突的约束。我不知道如何摆脱错误。
以下是对我所做的更详细的解释。
通过执行以下步骤,我能够在模拟器中获得一些功能。
wAny hAny
对于任何宽度任何高度我设置了以下4个约束:
也就是说,我将蓝色固定在顶部和左侧,我将红色固定在右侧和底部。无论使用什么大小的类,总是需要这些约束。
wAny hRegular
对于任何宽度常规高度,我添加了以下4个约束:
也就是说,我将蓝色固定在右侧,红色固定在左侧。我还把红色的顶边固定在蓝色的底边。而我的红色和蓝色相等。这解决了常规高度的所有约束问题。
wAny hCompact
对于任何宽度紧凑高度我添加了以下4个约束:
也就是说,我将蓝色固定在底部,红色固定在顶部。我还将红色的右边缘固定在蓝色的左边缘。我做了红色和蓝色相等的宽度。这样可以解决Compact Height的所有约束问题。
通过上面的设置,一切都可以在故事板预览中看到(请参见上面的第一张图片),并且在我测试过的所有尺寸的模拟器中都能正常工作。
但是,在Interface Builder中,我收到了wAny hAny Size Class的以下Missing Constraint错误:
这有点像catch-22,因为如果我尝试添加缺少的约束,那么我会使用Regular或Compact Size Class约束创建冲突的约束。以Compact为例:
如何解决这个问题?
答案 0 :(得分:6)
答案 1 :(得分:4)
这是因为在两个不同大小的类中,单个视图有两种不同的约束。因此,在使用不同的大小类时,修复wAny hAny的缺失/冲突约束的问题,尝试从wAny hAny大小类卸载附加约束,这些约束是在wAny hCompact或任何其他大小类中添加的。
你可以这样做:
步骤:
从弹出菜单中选择大小类后,Constraint检查器中将显示该大小类的新条目项。
注意:如果已存在所需尺寸类的现有条目项,请跳过此步骤。
仍会创建已卸载约束的运行时对象。但是,它不包含在视图层次结构中。
Constraint检查器显示一个或多个条目项,显示是否为大小类安装了约束。尺寸类的每个输入行都以删除按钮(x)开头,后跟尺寸类,然后是选择复选框。尺寸类显示宽度(w)和高度(h)。 C用于紧凑大小类,R用于常规大小类,Any用于任何大小类。
您可以找到关于此apple document on installing and uninstalling constraint for size classes的详细说明。
答案 2 :(得分:1)
借助xcode 7及以上版本提供的UIStackView
,您可以轻松实现所需。