展开tableViewCell Swift

时间:2015-11-11 09:34:49

标签: ios swift uitableview

在我的应用程序中,我有一个UITableView,它的单元格包含一个包含不同内容的文本,以及UIButton。

当用户单击单元格按钮时,单元格应展开以显示所有单元格的文本内容。所以扩展单元格的高度将根据文本内容的不同而不同。

我搜索了很多关于这个问题,但没有有用的结果:S。

我试过这种方式,但它没有给我正确的内容,有时候细胞扩展正确,有时候没有,

   let fixedWidth = tmpCell.textView.frame.size.width
        tmpCell.textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))//CGFloat.max
        let newSize = tmpCell.textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
        var newFrame = tmpCell.textView.frame
        newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
        tmpCell.textView.frame = newFrame
        self.heightForTextView = tmpCell.textView.frame.size.height

        tableView.beginUpdates()
        tableView.endUpdates()

任何人都知道如何实现这个问题? 或者我的方式有什么问题?

非常感谢

1 个答案:

答案 0 :(得分:0)

你的路很好。 (虽然我还没读完) 您必须为您的单元格设置一个新框架才能放大它,您必须相应地布置单元格的内容。以编程方式执行此操作即可。

但是,您必须告诉表格您的细胞有多大。通常这是表UITableView.rowHeight上的属性。但这仅适用于所有细胞都具有不适合您需要的相同高度的情况。

在您的情况下,您必须回复tableView(_:heightForRowAtIndexPath:)的调用,为每个单元格重新调整正确的高度。

因此,当用户触摸按钮时,您不会直接更改单元格的外观。您宁愿以某种方式存储该单元格中显示的对象的新统计信息。介绍一些布尔扩展属性左右。然后在表上调用UITableView.reloadData(),使其在更改的数据上重绘。然后回应它,好像你是第一次画细胞一样。评估扩展属性(或用于存储单元状态的任何内容)并相应地进行布局。您可以在cellForRowAtIndexPat中执行此操作,也可以在UITableCellView的子类中执行此操作,您可以使用它。但是,将UITableViewCell子类化为这些pruposes并不是一个坏主意。