我想为单元格中的子视图的addSubview
设置动画。 tableview单元格具有动态高度,因此用于折叠和展开的动画本地完成。
这是代码:
// MARK: UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let selectedCell = tableView.cellForRow(at: indexPath) as? MyCell {
selectedCell.showExtraView()
expandedCells.insert(indexPath)
}
if let prevSelectedCell = tableView.cellForRow(at: prevIndexPath) as? MyCell {
prevSelectedCell.hideExtraView()
expandedCells.remove(prevIndexPath)
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if expandedCells.contains(indexPath) {
return CGFloat(100.0)
} else {
return CGFloat(80.0)
}
}
单元格代码:
// MyCell
func showExtraView() {
contentView.addSubview(extraView)
contentView.setNeedsLayout()
}
func hideExtraView() {
extraView.removeFromSuperview()
contentView.setNeedsLayout()
}
这就是它的样子:
子视图(extraView
)包括图像和标签。标签动画正确,但图像只是出现在那里,好像它不是动画的一部分。
答案 0 :(得分:0)
为您查看alpha的动画。在动画块内将alpha从0.0变为1.0。
func showExtraView() {
extraView.alpha = 0.0
UIView.animate(withDuration: 0.6) {
contentView.addSubview(extraView)
extraView.alpha = 1.0
self.contentView.layoutIfNeeded()
}
}
func hideExtraView() {
UIView.animate(withDuration: 0.6, animations: {
extraView.alpha = 0.0
self.contentView.layoutIfNeeded()
}) { (completed) in
extraView.removeFromSuperview()
}
}