使用自动布局和自动尺寸为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()
}
}
}
结果是有效的,但存在一些缺陷。
文本立即更改,整个表格都具有动画效果。 但是,文本在垂直方向居中,在我看来,这不是故意的。 我想实现“更多显示”行为。