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