Ios 如何在自动布局中为表视图提供灵活的高度?
我想有一个场景,上面有一个垂直堆栈视图,下面有一个表视图。现场情况如下:Ios 如何在自动布局中为表视图提供灵活的高度?,ios,autolayout,Ios,Autolayout,我想有一个场景,上面有一个垂直堆栈视图,下面有一个表视图。现场情况如下: View Stack view Table view 我希望自动布局: 让堆栈视图消耗所需的垂直空间。这个 剩余的垂直空间将转到表视图 我使用这些布局约束: stackView.leading == superview.leading stackView.trailing == superview.trailing stackView.top == topLayoutGuide.bottom tableV
View
Stack view
Table view
我希望自动布局:
让堆栈视图消耗所需的垂直空间。这个
剩余的垂直空间将转到表视图
我使用这些布局约束:
stackView.leading == superview.leading
stackView.trailing == superview.trailing
stackView.top == topLayoutGuide.bottom
tableView.top == stackView.bottom
tableView.leading == superview.leading
tableView.trailing == superview.trailing
tableView.bottom == bottomLayoutGuide.top
但auto layout抱怨:
表视图:需要Y位置或高度的约束。
堆栈视图:需要Y位置或高度的约束。
为了解决这个问题,我尝试增加堆栈视图的垂直内容压缩阻力优先级:
Stack View Content Compression Resistance Priority:
Horizontal: 750
Vertical: 751
Table View Content Compression Resistance Priority:
Horizontal: 750
Vertical: 750
但是运气不好,自动布局也会出现同样的错误
我这里缺少什么?我解决了这个问题。事实证明,我们需要在堆栈视图中放置一个具体的元素来修复它。例如:
View
Stack view
Label
Table view
解决了问题,而:
View
Stack view
Label
Stack view
Table view
View
Stack view
Label
Stack view
Label
Table view
再次打断它,而:
View
Stack view
Label
Stack view
Table view
View
Stack view
Label
Stack view
Label
Table view
再次修复它,等等
因此,似乎由于堆栈视图没有固有大小,我们需要在堆栈视图中放置一些具有固有大小的元素,以便自动布局来推断堆栈视图的大小并明确地布局内容。是的,您做对了。但我想指出,具有动态内容(如堆栈视图和表视图)的视图在interface builder中没有有效的内部内容大小 因此,似乎由于堆栈视图没有固有的大小,我们 需要在中的堆栈视图中放置一些具有固有大小的元素 自动布局推断堆栈视图和布局大小的顺序 内容明确无误 因此,我们不应该仅仅为了避免自动布局警告而添加一些视图,而应该使用interface builder中的内在大小占位符
自动布局是一种用于设置窗框的工具。。。您需要指定tableView或stackView的高度,以便执行此操作。根据您的限制,您有两个不确定高度的视图。这种方法是否有任何缺点,例如可能隐藏一个微妙的布局错误?是的!我们可能会使视图具有占位符的固有大小,而在运行时它可能找不到占位符。但由于我们将其标记为占位符,所以必须在运行时提供它们。在上述情况下,只有当堆栈视图在运行时没有子视图时,才会发生这种情况。但是我们添加了堆栈视图来保存视图。如果我们不在运行时提供it视图,这将是我们自己的实现问题。