我的故事板上有一个UIViewController
横向并排的 2 个子视图。我添加了约束以将前缘和后缘固定为常数(20 分),并添加了另一个约束以保持宽度相等。如果我假设以下,应该可以计算出每个子视图的宽度需要:
- 子视图不重叠
- 没有其他视图存在(至少在水平方向上)
- 屏幕的宽度(超级视图)是已知的
然而,XCode 给了我一个警告,我的观点在水平方向上是模棱两可的。我猜这意味着 XCode 没有做出这些假设之一,但它是哪一个?有没有办法让我指示 XCode 做出这个假设?
编辑:好的,玩了一下,警告消失了,但看起来它并没有做出第一个假设——它只是将每个子视图的宽度设置为superview.width - 40
,并愉快地将一个视图埋在另一个视图下面。所以问题是如何阻止它们重叠?
编辑 2:好的,我的实际屏幕比我的简单示例复杂得多。这是我得到的:
所以在这个设置中,我有 4 个垂直和水平交错的视图。我希望蓝色、红色和紫色视图都相同subview.frame.size.width = superview.width - 60
。蓝色和紫色排列在左列,红色单独在右列,所有间隙(两列之间以及每列与其最近的边缘之间)都保持不变(20 pts)。这 3 张桌子的高度可变,我将按照James 的回答here中所述以编程方式设置. 底部是一个粉红色视图,它延伸了屏幕的宽度(减去间隙),并且位于紫色或红色视图下方 20 点的恒定位置,以较低者为准(我试图通过给它一个每个视图的间距约束 >= 20,我希望它会为其中一个准确选择 20)。由于所有高度都是动态的,并且可能不一定同时适合屏幕,因此我将它们的 superview aUIScrollView
而不是 normal UIView
。
当一切都说完了,我仍然收到一个警告,我的所有 4 个视图在水平方向上都是模棱两可的,而粉色条在垂直方向上是模棱两可的。我认为它很难意识到什么应该放在什么旁边,这就是为什么它认为它在水平方向上是模棱两可的。而且我认为将粉红色条放置在紫色或红色视图下方 20 分的位置并不合适,这就是它认为它在垂直方向上模棱两可的原因。谁能证实或否认这些怀疑?或者建议一种解决方法?当我最后运行它时,我得到了这个(我将滚动视图的背景设置为黄色,这在故事板屏幕截图中是看不到的):