自动调整自定义UITableViewCell的大小

时间:2016-06-08 14:18:00

标签: ios swift uitableview

我有一个自定义表格视图单元格,我想根据标签中的文本数量自动调整大小。

这是我的手机。我想调整大小以显示评论标签中的所有文本。 enter image description here

在我的表视图控制器中,我使用UITableViewAutomaticDimension

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if indexPath.section == 0 {
            if indexPath.row == 0 {
                return 200
            } else {
                return 49
            }
        } else if indexPath.section == 1 {
            return 100
        } else if indexPath.section == 2 {
            if indexPath.row == 0 {
                return 200
            } else {
                return 400
            }
        } else {
            return UITableViewAutomaticDimension
        }
    }

    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

这就是我最终的结果。

enter image description here

3 个答案:

答案 0 :(得分:0)

确保从子UIView或您拥有的任何子元素中为contentView设置了top,bottom,trailing和leading余量的约束。这可能会对你有所帮助

enter image description here

在您的情况下,您需要定义从ReviewLabel到contentView的底部间距约束以使其工作。从相应的UILabel开始,也需要顶部,尾部和前导边距。顶部空间可以从DateLabel定义,而前导和尾随空格可以从包含星星的UIView定义

为什么?

contentView需要知道它的子视图的框架才能使uitableviewautomaticdimension工作。如果它不知道它的子视图框架那么它就不知道自动调整大小的内容

答案 1 :(得分:0)

在委托函数中实现高度计算:

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
   let cell = tableView.cellForRowAtIndexPath(indexPath)
   let size = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
   return size.height + 1.0 // Add 1.0 for the cell separator height
}

答案 2 :(得分:0)

你需要:

  1. 为IB中的superView设置标签myFunction(); //returns ["arg1 (default)", "arg2 = "bob" (default)"] 约束
  2. 设置top, trailing, leading, bottom
  3. 设置numberOfLines = 0Content Compression Resistance Priority Vertical
  4. 在代码Content Hugging Priority Vertical self.tableView.estimatedRowHeight = MinControlSize;
  5. 中设置

    设置文本后调用

    self.tableView.rowHeight = UITableViewAutomaticDimension;

    在委托方法

    cell.setNeedsDisplay();
    cell.layoutIfNeeded();
    

    希望这有帮助。我从Apple的自我调整示例中获取了这个