如何在自动布局中为表格视图提供灵活的高度?

时间:2017-02-13 18:50:57

标签: ios autolayout

我希望有一个场景,顶部有一个垂直堆栈视图,下面有一个表格视图。场景如下:

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

但没有运气,自动布局也会出现同样的错误。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

是的,你做对了。但我想指出,具有动态内容的视图(如堆栈视图和表视图)在界面构建器中没有有效的内部内容大小。

  

所以,似乎因为堆栈视图没有内在大小,我们   需要在堆栈视图中放置一些具有内在大小的元素   自动布局的顺序是推断堆栈视图和布局的大小   内容毫不含糊。

因此,为了避免自动布局警告而不是添加一些视图,我们应该使用的是界面构建器中的内部大小占位符

enter image description here

答案 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

再次修复,等等。

因此,似乎由于堆栈视图没有内部大小,我们需要在堆栈视图中放置一些内在大小的元素,以便自动布局推断堆栈视图的大小并明确地布局内容