我希望有一个场景,顶部有一个垂直堆栈视图,下面有一个表格视图。场景如下:
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
但自动布局抱怨:
- 表视图:需要Y位置或高度的约束。
- 堆叠视图:需要Y位置或高度的约束。
为了解决这个问题,我尝试提高堆栈视图的垂直内容压缩阻力优先级:
Stack View Content Compression Resistance Priority:
Horizontal: 750
Vertical: 751
Table View Content Compression Resistance Priority:
Horizontal: 750
Vertical: 750
但没有运气,自动布局也会出现同样的错误。
我在这里缺少什么?
答案 0 :(得分:1)
是的,你做对了。但我想指出,具有动态内容的视图(如堆栈视图和表视图)在界面构建器中没有有效的内部内容大小。
所以,似乎因为堆栈视图没有内在大小,我们 需要在堆栈视图中放置一些具有内在大小的元素 自动布局的顺序是推断堆栈视图和布局的大小 内容毫不含糊。
因此,为了避免自动布局警告而不是添加一些视图,我们应该使用的是界面构建器中的内部大小占位符。
答案 1 :(得分:0)
我解决了这个问题。事实证明,我们需要将一个具体元素放到堆栈视图中以便修复它。例如:
View
Stack view
Label
Table view
解决问题,而:
View
Stack view
Label
Stack view
Table view
再次打破它,而:
View
Stack view
Label
Stack view
Label
Table view
再次修复,等等。
因此,似乎由于堆栈视图没有内部大小,我们需要在堆栈视图中放置一些内在大小的元素,以便自动布局推断堆栈视图的大小并明确地布局内容