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

前端之家收集整理的这篇文章主要介绍了Swift:如何为UITableView的rowHeight设置动画?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过在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检查高度变化.然后实现委托覆盖func tableView(tableView:UITableView,heightForHeaderInSection section:Int) – > CGFloat,为每个细胞提供合适的高度.高度的变化将自动动画.您可以为没有明确高度的项目返回UITableViewAutomaticDimension.

但是,我建议不要在cellForRowAtIndexPath中执行此类操作,而应该在响应一个tapSelectRowAtIndexPath的响应中执行此操作.在我的一个课程中,我做了:

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相关文章