动画在动态单元格高度为

时间:2017-05-27 16:53:32

标签: ios swift uitableview animation tableviewcell

我想为单元格中的子视图的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()
}

这就是它的样子:

enter image description here

子视图(extraView)包括图像和标签。标签动画正确,但图像只是出现在那里,好像它不是动画的一部分。

1 个答案:

答案 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()
    }
}