gpt4 book ai didi

ios - 为什么之前调用 reloadRows 时 UITableView setContentOffset 无法正常工作?

转载 作者:行者123 更新时间:2023-11-30 10:25:35 27 4
gpt4 key购买 nike

之前调用 tableView.reloadRows(at: , with: ) 时,tableView.setContentOffset(,animated: ) 似乎无法正常工作。

如果调用了reloadRowssetContentOffset会将TableView上下移动几个像素,但不会滚动到正确的位置。仅当第二次调用 setContentOffset 时,滚动才能正确执行。

这是一个已知问题、错误还是我做错了什么?

<小时/>

代码

这个问题可以用一个简单的 UIViewController 来重现,它只包含一个 UINavigationBar 以及两个 UIBarButtonItems 和一个 UITableView >。

BarButtons 用于触发reloadRowssetContentOffset。 TableView 包含 10 个标准 UITableViewCell 的简单列表以及一些文本。

class MyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var tableView: UITableView!


// Actions
@IBAction func leftBarButtonAction(_ sender: Any) {
// Scroll up 100px
tableView.setContentOffset(CGPoint(x: 0, y: self.tableView.contentOffset.y + 100), animated: true)
}

@IBAction func rightBarButtonAction(_ sender: Any) {
// Reload first row
tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)
}


// TableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "defaultCell") ?? UITableViewCell()
cell.textLabel?.text = "Item No \(indexPath.row)"
return cell
}

}
  • 显示 View Controller
  • 点击 leftBarButton 触发 setContentOffset 并将 TableView 向上滚动一点。这很好用
  • 点击右侧的BarButton 即可触发reloadRows。第一行将重新加载(不可见)
  • 点击 leftBarButton 再次触发 setContentOffset。 TableView 只会轻微移动,而不会正确滚动
  • 点击 leftBarButton 再次触发 setContentOffset。现在滚动将再次起作用。

有什么想法可以防止这种奇怪的行为吗?

最佳答案

    @IBAction func leftBarButtonAction(_ sender: Any) {
// Scroll up 100px
tableView.beginUpdates()
tableView.setContentOffset(CGPoint(x: 0, y: self.tableView.contentOffset.y + 100), animated: true)
tableView.endUpdates()
}

关于ios - 为什么之前调用 reloadRows 时 UITableView setContentOffset 无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60074010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com