使用自动布局和自动尺寸为UITableViewCell动画大小和文本更改

在我最近的iOS项目中,我有一个视图,其中内容显示为垂直可滚动的卡,并且每个卡都可以扩展以显示更多详细信息。

我已经将整个解决方案建模为UITableView ,其中每个单元格包含垂直堆叠的子视图(由于iOS 8的支持,我无法使用UIStackView ),并且每个子视图都使用其自己的视图模型进行了初始化(但这只是实现细节)。

在最终视图中,层次结构看起来类似于下图。 通过单击“ 更多更少”按钮,“ 描述”字段在短文本和长文本之间切换。

从iOS 8开始,UITableView提供了一种自动管理UITableViewCell高度的简便方法,而无需手动计算并为每个单元格提供高度。 通过将行高设置为自动并提供估计的行高来完成

  tableView.rowHeight = UITableViewAutomaticDimension 
  tableView.estimatedRowHeight = 124 

您只需要确保设置正确的约束即可,这意味着,例如,如果UILabel正确计算了其大小,便可以将其超级视图推到所需的大小。 这意味着您不能例如设置高度限制,最终应该从上到下固定标签。 我的情况非常简单,我只是将UILabel固定在每一侧。

当涉及到动画时,无需考虑高度就非常简单。 您只需更新文本并设置动画大小即可。 因此,代码如下所示:

  //细胞 
@IBAction功能按钮MoreTouched(_发送方:UIButton){
  labelDescription.text = longText 
 委托?.contentDidChange(cell:self) 
  } 
  //代表 
扩展TableViewController:CellDelegate {
  func contentDidChange(cell:Cell){ 
  UIView.animate(withDuration:1){ 
  self.tableView.beginUpdates() 
  self.tableView.endUpdates() 
  } 
  } 
  } 

结果是有效的,但存在一些缺陷。

文本立即更改,整个表格都具有动画效果。 但是,文本在垂直方向居中,在我看来,这不是故意的。 我想实现“更多显示”行为。