【问题标题】:Swift: Is it possible to not reload the first cell/row when using tableView.reloadData()?Swift:使用 tableView.reloadData() 时是否可以不重新加载第一个单元格/行?
【发布时间】:2020-07-28 06:29:43
【问题描述】:

我想知道是否可以重新加载 tableView 而无需以简单的方式重新加载第一个单元格/行?如果有,你会怎么做?

【问题讨论】:

  • 这没有简单的方法,至少我不知道如何简单
  • @ReinierMelian 年,我是这么认为的。我也找不到办法,只是想确定一下
  • 这很容易做到
  • @Rob 听起来不错。你会怎么做?或许你可以回答一下?
  • 其实我还有一个问题。第一行有什么,其他行有什么?

标签: ios swift uitableview reload


【解决方案1】:
let itemArray:[Int] = []

for i in 1..<itemArray.count {
    let indexPath = IndexPath(item: i, section: 0)
    tableView.reloadRows(at: [indexPath], with: .fade)
}

如果您的表当前没有分组, 最好的方法是将您的第一个单元格添加到一个部分,并将所有其他单元格添加到另一个部分。然后您可以使用

轻松重新加载除第一个单元格之外的所有单元格
   //section 0 - your 1st cell
   //section 1 - other cells
    tableView.reloadSections([1], with: .none)

【讨论】:

  • 在考虑多部分方法之前,您必须考虑 tableView 是否被分组。
  • 多次调用reloadRows 的另一个问题是动画看起来很时髦。如果您要进行多次更新,您应该将更新包装在 begin/endUpdatesperformBatchUpdates
【解决方案2】:

只需使用 reloadRows 方法重新加载您的 tableView。

var dataSource: [SomeData] = []

func reloadAllButFirstRow() {
    guard dataSource.count > 0 else { return }

    tableView.reloadRows(
        at: (1...dataSource.count).map { IndexPath(row: $0, section: 0) },
        with: .fade
    )
}

【讨论】:

  • 我认为您的解决方案按我要求的方式工作,但我忘了提到从重新加载到重新加载的行数会发生变化。我认为这是导致错误的原因
  • @Chris 好的,那么您将不得不向我们展示您如何更新数据源?如何添加、删除或修改项目?你能发布那个代码吗?
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多