动画在具有动态单元格高度的单元格中添加子视图

Posted

技术标签:

【中文标题】动画在具有动态单元格高度的单元格中添加子视图【英文标题】:Animate adding a subview in a cell with dynamic cell height 【发布时间】:2017-05-27 16:53:32 【问题描述】:

我想为单元格中子视图的addSubview 设置动画。表格视图单元格具有动态高度,因此折叠和展开动画是原生完成的。

这是代码:

// 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) 包括图像和标签。标签动画正确,但图像只是出现在那里,好像它不是动画的一部分。

【问题讨论】:

【参考方案1】:

改为动画您视图的 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()
    

【讨论】:

以上是关于动画在具有动态单元格高度的单元格中添加子视图的主要内容,如果未能解决你的问题,请参考以下文章

具有调整单元格动画大小的动态单元格大小

动态表格视图单元格,以编程方式更改子视图高度

在表格视图单元格中动态调整子视图的大小

将子视图添加到选定的表格视图单元格

计算 NSString 高度以在 collectionView 单元格中使用

UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度