【问题标题】:UITableView jumpy on scroll after changing cell height更改单元格高度后,UITableView 在滚动时跳动
【发布时间】:2014-12-18 13:02:48
【问题描述】:

所以我有一个 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

【问题讨论】:

  • 你解决了吗?我遇到了同样的问题,无法深入了解。
  • @David 我的解决办法是不幸地停止使用自动调整单元格大小并回到旧的heightForRowAtIndexPath
  • 我也得出了我需要这样做的结论,但我一直无法弄清楚如何计算单元格的高度。你碰巧提到你是怎么做的吗?

标签: ios iphone uitableview swift uiscrollview


【解决方案1】:

你应该包含你的 cellForRow 和 heightForRow 的代码,但我会试一试。

当在 cellForRow 中点击一个单元格时,您应该存储该单元格的索引,然后重新加载数据或just that cell。然后在 heightForRow 中使用if(yourTappedCell){return preferredHeight;}

【讨论】:

  • 感谢 TheSD,我会在编辑时将这些添加到方法中。但我已经在做你提到的事情了。这两种方法都可以正确处理新的单元格高度。其实在滚动之前看起来效果很好,只是向上滚动才会出现跳跃。
【解决方案2】:

不幸的是,似乎没有一个简单的答案。我在多个 iOS 应用程序上都遇到了麻烦。

我发现的唯一解决方案是在 UITableView 再次出现时以编程方式滚动到它的顶部。

[self.tableView setContentOffset:CGPointMake(0, 0 - self.tableView.contentInset.top) animated:YES];

self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top);

希望这是一个可接受的解决方法,同时仍然能够使用动态单元格高度 =)

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 2014-11-16
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多