UITableview插入/删除行动画故障

时间:2015-02-25 08:53:03

标签: ios uitableview uiviewanimation

我有不同的部分和行。每行都有一个可变的高度。我通过插入和删除行来扩展和折叠表。但是当我展开/折叠时,其他单元格会相互重叠,从而导致出现故障。

func expandItemAtIndex(index:Int) {
  var indexPaths = NSMutableArray()
  var currentSubItems = contentsArray.objectAtIndex(index) as NSArray
  var insertPos = 0
  for(var i = 0; i < currentSubItems.count; i++) {
    indexPaths.addObject(NSIndexPath(forRow: insertPos++, inSection: index))
  }
  self.tableview.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
}

func collapseItemAtIndex(index: Int) {
  var indexPaths = NSMutableArray()
  for (var i = 0; i <  contentsArray.objectAtIndex(index).count; i++) {
    indexPaths.addObject(NSIndexPath(forRow: i, inSection: index))
  }

  self.tableview.deleteRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
}

func expandOrCollapseCells(object:AnyObject) {
  self.tableview.beginUpdates()
  if (expandedIndex[index] == index) {
    self.collapseItemAtIndex(expandedIndex[index])
    expandedIndex[index] = -1
  } else {
    expandedIndex[index] = index
    self.expandItemAtIndex(expandedIndex[index])
  }
  self.tableview.endUpdates()

  if (self.tableview.numberOfRowsInSection(index) > 0) {
    self.tableview.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: index), atScrollPosition: UITableViewScrollPosition.Top, animated: true)
  }
}

点击标题时,我正在调用expandOrCollapseCells

您可以找到类似的问题here

视频:https://www.youtube.com/watch?v=0YTHu9u88_Y

1 个答案:

答案 0 :(得分:0)

由于语法不同,我假设您没有使用Swift 3.

真正突出的一点是这一行: self.tableview.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)

您是否尝试过使用UITableViewRowAnimation.Top

因为在我看来,视频中可见的“动画”是由beginUpdates()和endUpdates()强制的,因为动画值在实际方法中设置为None

如果您因为某些原因没有特别需要将扩展​​内容作为表格单元格,我也不建议使用其他单元格来扩展/折叠任何给定单元格中的内容。如果情况并非如此,那么我建议在父级单元结构中布置扩展内容,并根据需要隐藏/取消隐藏。