使用UIStackViews动态UITableView单元格高度

时间:2016-05-08 13:21:34

标签: ios uitableview ios-autolayout uistackview

我正在尝试使用UIStackViews和autolayout创建动态高度行,所以下面是我的UITableViewCell xib。

enter image description here

因为你可以看到它里面有所有的stackViews。我尝试使用估计行高和委托函数。但没有成功。

所以这是我的一些疑问。

1)设计动态高度行时要记住的要点。 2)在我目前的情况下我做错了什么。

2 个答案:

答案 0 :(得分:1)

Ranjit,在这种情况下没有必要使用UIStackView

您可以在不使用UIStackView的情况下轻松处理此问题。这是给你的提示。

在找到估计的行高之前,您应该应用一些Autolayout技巧。

  1. 您只需为UIImageView添加高度和宽度约束。并为UIImageView添加领先空间和顶部空间。

  2. 然后为单元格中的第一个标签添加尾随空格和前导空格。并将顶部对齐到UIImageView

  3. 为第二个标签添加顶部,前导和尾随空格。

  4. 添加日历图像的高度和宽度,并将顶部空间添加到第二个标签,然后将前导对齐到第二个标签(右键单击并从日历图像拖动到第二个标签)。将尾随空格添加到第三个标签。

  5. 在第3个标签上,将顶部空间添加到第二个标签或中心对齐日历图像。添加尾随空格到容器和底部空间。

  6. 在第4个标签上(UIImageView下),您应该在日历图像上添加一个尾随空格,并将中心对齐到日历图像。将引导空间添加到容器中。

  7. 确保所有持有标签的大数据的行数为" 0"。

  8. 现在所有组件都满足x和y值。它有助于找到您的tableview的估计行高。

    -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return UITableViewAutomaticDimension;
    }
    
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
         return UITableViewAutomaticDimension;
    }
    

    现在您的表格视图可以自动选择高度。希望你有想法。

答案 1 :(得分:0)

在当前情况下我做错了什么。

我看到2个大问题:

  1. 仅具有一项的堆栈视图是不合逻辑的。堆栈视图会自动在其中的2个或更多项目之间添加约束。
  2. 您缺少用于容纳所有内容的顶级堆栈视图。对于您的布局,您仍然需要4组手动添加的约束才能将堆栈视图放置在其父视图中。

您似乎已经从2列设计中获取布局,所以我将继续。

这是我的布局。

interface builder screen shot

这里是单元格渲染了3次。

enter image description here

这与您所需的布局不完全匹配。但是,我想创建一个与您的布局接近的布局,同时还要使用尽可能多的默认属性。我只更改了默认值的两件事。

  1. “共享类型”标签垂直内容的优先级= 250(从251开始)。这是解决布局歧义的较小修正。
  2. “列1”堆栈视图对齐方式=前导(从填充起)。这是一项重要更改,可以正确显示第1列。

如果要微调此布局,则应使用堆栈视图的间距,分布和对齐方式。

注意:“ 2列”堆栈视图具有4个约束,以使视图的前导/尾随/顶部/底部为0。没有其他约束。