2017-07-06 153 views
0

我有一个tableview(样式 - 分组),其中包含的行数多于可以放入其框架的行数,因此您必须滚动才能看到最后一行。当我删除最后一行时,tableview将其内容向下滚动,因此新的最后一行位于框架的底部(填充空白空间)。防止在移除最后一个单元格后滚动uitableview

如何防止UITableView在删除最后一行后滚动?我希望它保留空白区域,不要自动滚动。

我试图设置内容插入,但它似乎并不妨碍滚动不幸。

编辑:我的去除行代码:

func removeLastRow() { 
    let indexPath = IndexPath.init(row: self.messages.count - 1, section: 0) 

    self.messages.removeLast() 
    CATransaction.begin() 
    self.tableView.beginUpdates() 
    CATransaction.setCompletionBlock {() -> Void in 
     // do stuff, add new rows 
    } 
    self.tableView.deleteRows(at: [indexPath], with: .left) 
    self.tableView.endUpdates() 
    CATransaction.commit() 
} 
+0

假设你*可以*删除行,空留空间......你想要什么未来呢?用户是否可以将表格向下滚动,然后备份*保留行所在的空白空间?或者你只是想让它暂时成为一个空白的空间,当用户滚动“新的底部行”时,**是最后一行? – DonMag

+0

@DonMag我想保留空的空间。像插页一样。我最终将删除插入并插入另一行。但如果我不这样做 - 空的空间仍然空空如也。因此,当用户可以滚动到底部并且“新的最后一行”必须变成“真正的最后”时,没有复杂的情况。 – iur

+0

也许而不是*删除*最后一行,*用空白单元格替换它* – DonMag

回答

0

Retreive细胞通过调用tableView:heightForRowAt:和删除后,在删除之前的大小,垂直内容的表视图的偏移手动设置到当前的垂直内容偏移,加上单元格的高度。

let deletedCellHeight = tableView.heightForRowAt(indexPath) 

然后:

tableView.contentOffset.x += deletedCellHeight 
+0

这不幸似乎不适用于动画。现在,而不是动画滚动底部,我得到一个抽搐的内容,它仍然抽搐到底部。 – iur

+0

您应该使用.none作为动画并实现自定义动画块,然后可以使用内容偏移设置来执行该动画块。 – the4kman

+0

嗯,所以你建议假的行删除动画,同时保持抵消?我希望找到一个更简单的方法:( – iur

相关问题