所以我有一个tableView,我想在点击时更改单元格的高度。好吧,实际上,我正用一个更大的细胞替换它。 点击,我打电话:
tableView.beginUpdates()
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
tableView.endUpdate()
然后我修改我的cellForRowAtIndexPath
以返回正确的新单元格和高度。通过在单元格的实现中覆盖sizeThatFits
来自动计算单元格的高度:
override func sizeThatFits(size: CGSize) -> CGSize {
return CGSizeMake(size.width, myHeight)
}
奇怪的是,在我这样做之后,向下滚动很好,但是当我向上滚动时,桌子每秒跳跃5个左右的像素,直到我到达顶部。在我到达桌面顶部后,问题就消失了,两个方向都没有跳跃。知道为什么会这样吗?我想它与新的单元格高度取代其他单元格有关,但我不明白为什么tableView没有处理这个问题。任何帮助表示赞赏!
谢谢!
编辑:添加了来自cellForRowAtIndexPath的代码:
if self.openedCellIndex != nil && self.openedCellIndex == indexPath {
cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as ListCell
(cell as ListCell).updateWithDetailView(dayViewController!.view)
} else {
cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as ListCell
(cell as ListCell).updateWithData(eventDay: store.events![indexPath.row], reminderDay: store.reminders![indexPath.row])
}
return cell
答案 0 :(得分:0)
你应该包含你的cellForRow和heightForRow的代码,但我会盲目的。
当在cellForRow中点击一个单元格时,您应该存储该单元格的索引,然后重新加载数据或just that cell。然后在heightForRow中使用if(yourTappedCell){return preferredHeight;}
答案 1 :(得分:0)
不幸的是,似乎没有一个简单的答案。我在多个iOS应用程序上一直在努力。
我找到的唯一解决方案是再次出现时以编程方式滚动到UITableView的顶部。
[self.tableView setContentOffset:CGPointMake(0, 0 - self.tableView.contentInset.top) animated:YES];
OR
self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top);
希望这是一个可以接受的工作,同时仍能使用动态单元格高度=)