我有不同的部分和行。每行都有一个可变的高度。我通过插入和删除行来扩展和折叠表。但是当我展开/折叠时,其他单元格会相互重叠,从而导致出现故障。
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
答案 0 :(得分:0)
由于语法不同,我假设您没有使用Swift 3.
真正突出的一点是这一行:
self.tableview.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
您是否尝试过使用UITableViewRowAnimation.Top
?
因为在我看来,视频中可见的“动画”是由beginUpdates()和endUpdates()强制的,因为动画值在实际方法中设置为None
。
如果您因为某些原因没有特别需要将扩展内容作为表格单元格,我也不建议使用其他单元格来扩展/折叠任何给定单元格中的内容。如果情况并非如此,那么我建议在父级单元结构中布置扩展内容,并根据需要隐藏/取消隐藏。