我正在构建一个具有供用户提交的帖子的供稿视图的应用。此视图具有UITableView
一个自定义UITableViewCell
实现。在此单元格中,我还有另一个UITableView
用于显示评论。要点是这样的:
Feed TableView
PostCell
Comments (TableView)
CommentCell
PostCell
Comments (TableView)
CommentCell
CommentCell
CommentCell
CommentCell
CommentCell
初始Feed将下载3条评论进行预览,但是如果有更多评论,或者用户添加或删除评论,我想PostCell
通过在其中添加或删除CommentCells
评论表来更新Feed表视图中的的PostCell
。我目前正在使用以下帮助程序来完成此任务:
// (PostCell.swift) Handle showing/hiding comments
func animateAddOrDeleteComments(startRow: Int, endRow: Int, operation: CellOperation) {
let table = self.superview?.superview as UITableView
// "table" is outer feed table
// self is the PostCell that is updating it's comments
// self.comments is UITableView for displaying comments inside of the PostCell
table.beginUpdates()
self.comments.beginUpdates()
// This function handles inserting/removing/reloading a range of comments
// so we build out an array of index paths for each row that needs updating
var indexPaths = [NSIndexPath]()
for var index = startRow; index <= endRow; index++ {
indexPaths.append(NSIndexPath(forRow: index, inSection: 0))
}
switch operation {
case .INSERT:
self.comments.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
case .DELETE:
self.comments.deleteRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
case .RELOAD:
self.comments.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
}
self.comments.endUpdates()
table.endUpdates()
// trigger a call to updateConstraints so that we can update the height constraint
// of the comments table to fit all of the comments
self.setNeedsUpdateConstraints()
}
override func updateConstraints() {
super.updateConstraints()
self.commentsHeight.constant = self.comments.sizeThatFits(UILayoutFittingCompressedSize).height
}
这样就可以完成更新。该帖子会PostCell
按预期更新到位,并在中添加或删除评论。我PostCells
在Feed表中使用了自动调整大小。展开后的注释表PostCell
可以显示所有注释,但是动画有点生涩,在进行单元格更新动画时,该表会上下滚动十几个像素。
调整大小过程中的跳跃有点烦人,但是我的主要问题随后出现。现在,如果我在提要中向下滚动,则滚动将像以前一样平滑,但是如果我在添加注释后重新调整大小的单元格上方向上滚动,则提要将向后跳转几次,然后到达提要的顶部。我iOS8
为Feed设置了自动调整大小的单元格,如下所示:
// (FeedController.swift)
// tableView is the feed table containing PostCells
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 560
如果删除estimatedRowHeight
,则只要单元格高度发生变化,表格就会滚动到顶部。我现在对此感到非常困惑,作为一名新的iOS开发人员,可以使用您可能拥有的所有技巧。