2015-11-11 60 views
0

在我的应用程序中,我有一个UITableView,其单元格包含具有不同内容的文本和UIButton。展开tableViewCell Swift

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

我搜索了很多关于这个问题,但没有有用的结果: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() 

任何一个NOW的如何实现这个问题? 或我的方式有什么问题?

非常感谢

回答

0

您的方式没问题。 (尽管我还没有完全阅读它) 你必须为你的单元格设置一个新的框架来扩大它,你将不得不相应地布局单元格的内容。以编程方式执行此操作即可。

但是,您必须告诉表格您的单元格有多大。通常这是表UITableView.rowHeight上的一个属性。但是,只有当所有的细胞具有相同的高度,这不适合您的需要时才适用。

在您的情况下,您将不得不响应对tableView(_:heightForRowAtIndexPath:)的呼叫,以确保每个小区的正确高度。

所以,当用户触摸按钮,那么你不会直接改变你的细胞的外观。您宁愿存储该单元中显示的对象的新统计信息。引入一些布尔扩展属性等。然后在你的表上调用UITableView.reloadData(),使其重绘自己的数据。然后回应它,就好像你是第一次绘制细胞一样。评估扩展属性(或用于存储单元格状态的任何内容)并相应地进行布局。您可以在cellForRowAtIndexPat中执行此操作,或者您可以在UITableCellView的子类中执行此操作,您可以使用它。然而,为这些pruposes分类UITableViewCell并不是一个坏主意。