gpt4 book ai didi

Swift:如何为 UITableView 的 rowHeight 设置动画?

转载 作者:IT王子 更新时间:2023-10-29 05:21:02 26 4
gpt4 key购买 nike

我试图通过在 tableView 函数中调用 startAnimation() 来设置 tableViewCell 行的高度:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! TableViewCell

tableView.rowHeight = 44.0

startAnimation(tableView)

return cell
}

//MARK: Animation function

func startAnimation(tableView: UITableView) {

UIView.animateWithDuration(0.7, delay: 1.0, options: .CurveEaseOut, animations: {

tableView.rowHeight = 88.0

}, completion: { finished in

print("Row heights changed!")
})
}

结果:行高确实发生了变化,但没有任何动画发生。我不明白为什么动画不起作用。我是否应该在某处定义一些开始和结束状态?

最佳答案

不要那样改变高度。相反,当您知道要更改单元格的高度时,请调用(在任何函数中):

self.tableView.beginUpdates()
self.tableView.endUpdates()

这些调用通知 tableView 检查高度变化。然后实现委托(delegate) override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat,并为每个单元格提供适当的高度。高度的变化将自动动画化。对于没有明确高度的项目,您可以返回 UITableViewAutomaticDimension

不过,我不建议在 cellForRowAtIndexPath 中执行此类操作,但建议在响应点击 didSelectRowAtIndexPath 的操作中执行此类操作。在我的一门课中,我会:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath == self.selectedIndexPath {
self.selectedIndexPath = nil
}else{
self.selectedIndexPath = indexPath
}
}

internal var selectedIndexPath: NSIndexPath? {
didSet{
//(own internal logic removed)

//these magical lines tell the tableview something's up, and it checks cell heights and animates changes
self.tableView.beginUpdates()
self.tableView.endUpdates()
}
}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath == self.selectedIndexPath {
let size = //your custom size
return size
}else{
return UITableViewAutomaticDimension
}
}

关于Swift:如何为 UITableView 的 rowHeight 设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37626282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com