UITableView 在 reloaddata 上滚动
UITableView scrolling on reloaddata
我的项目中有 UITableview。
单击页脚上的添加新按钮时,我正在获取新数据。
这是我的应用程序(已演示)
https://pastenow.ru/e327ad5e4978777b280552c4e92f032d
点击添加新按钮时
有一些向上滚动。我想禁用它并且不需要将 uitableview 滚动到任何方向。
这是屏幕截图(演示)
https://pastenow.ru/e489ca3b9b5f78c31ad388cf8b3d02b9
我已经检查了 uitableview 的 setcontentoffset,但它不起作用我不知道为什么。
override func viewDidLoad() {
super.viewDidLoad()
for i in 0...10 {
items.append(i)
}
}
@IBAction func addNewBtnClicked(_ sender: Any) {
for i in 10...20 {
items.append(i)
}
tableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell") as! MyCell
cell.titleLabel.text = "\(items[indexPath.row])"
return cell
}
我已经添加了这段代码,用于工作。我知道这不是真正的解决方案,但现在有效。
tableView.scrollToRow(at: IndexPath(row: newsList.count - myPageSize, section: 0), at: .bottom, animated: false )
我也搜索过这个问题,直到现在我还没有找到一个非硬编码的解决方案,但至少找到了以下可以很好地满足我需要的解决方案(它和你的几乎一样):
extension UITableView {
func reloadDataWithoutAnimation(scrollingAt desiredIndexPath: IndexPath, at desiredScrollPosition: UITableView.ScrollPosition) {
UIView.performWithoutAnimation {
reloadData()
scrollToRow(at: desiredIndexPath, at: desiredScrollPosition, animated: false)
}
}
}
用法:
let indexPath = IndexPath(row: desiredRow, section: desiredSection)
tableView.reloadDataWithoutAnimation(scrollingAt: indexPath, at: desiredScrollPosition)
希望对您有所帮助。
我的项目中有 UITableview。 单击页脚上的添加新按钮时,我正在获取新数据。 这是我的应用程序(已演示) https://pastenow.ru/e327ad5e4978777b280552c4e92f032d
点击添加新按钮时 有一些向上滚动。我想禁用它并且不需要将 uitableview 滚动到任何方向。 这是屏幕截图(演示) https://pastenow.ru/e489ca3b9b5f78c31ad388cf8b3d02b9
我已经检查了 uitableview 的 setcontentoffset,但它不起作用我不知道为什么。
override func viewDidLoad() {
super.viewDidLoad()
for i in 0...10 {
items.append(i)
}
}
@IBAction func addNewBtnClicked(_ sender: Any) {
for i in 10...20 {
items.append(i)
}
tableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell") as! MyCell
cell.titleLabel.text = "\(items[indexPath.row])"
return cell
}
我已经添加了这段代码,用于工作。我知道这不是真正的解决方案,但现在有效。
tableView.scrollToRow(at: IndexPath(row: newsList.count - myPageSize, section: 0), at: .bottom, animated: false )
我也搜索过这个问题,直到现在我还没有找到一个非硬编码的解决方案,但至少找到了以下可以很好地满足我需要的解决方案(它和你的几乎一样):
extension UITableView {
func reloadDataWithoutAnimation(scrollingAt desiredIndexPath: IndexPath, at desiredScrollPosition: UITableView.ScrollPosition) {
UIView.performWithoutAnimation {
reloadData()
scrollToRow(at: desiredIndexPath, at: desiredScrollPosition, animated: false)
}
}
}
用法:
let indexPath = IndexPath(row: desiredRow, section: desiredSection)
tableView.reloadDataWithoutAnimation(scrollingAt: indexPath, at: desiredScrollPosition)
希望对您有所帮助。