gpt4 book ai didi

ios - 使用 tableView 函数 scrollToRow 它崩溃了

转载 作者:行者123 更新时间:2023-12-04 03:48:18 33 4
gpt4 key购买 nike

当 tableView 滚动时,我更新 dataSource 并调用 tableView 函数 reloadData . tableView 后 DidEndDecelerating我调用函数:

let indexPath = IndexPath(row: row, section: 0)
if row < dataModels.count {
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}

有时它会崩溃。崩溃日志如下:
0 CoreFoundation  __exceptionPreprocess

1 libobjc.A.dylib objc_exception_throw

2 CoreFoundation +[_CFXNotificationTokenRegistration keyCallbacks]

3 Foundation -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

4 UIKitCore -[UITableViewRowData _assertValidIndexPath:allowEmptySection:]

5 UIKitCore -[UITableViewRowData ensureHeightsFaultedInForScrollToIndexPath:withScrollPosition:boundsHeight:]

6 UIKitCore -[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:]

7 UIKitCore -[UITableView _scrollToRowAtIndexPath:atScrollPosition:animated:usingPresentationValues:]

8 UIKitCore -[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]

最佳答案

先查indexpath存在与否。来电scrollToRow方法。

extension UITableView {
func isExist(indexPath: IndexPath) -> Bool {
if indexPath.section >= self.numberOfSections {
return false
}
if indexPath.row >= self.numberOfRows(inSection: indexPath.section) {
return false
}
return true
}
}


func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if !scrollView.isDecelerating {
let indexPath = IndexPath(row: row, section: 0)
if tableView.isExist(indexPath: indexPath) {
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
}

关于ios - 使用 tableView 函数 scrollToRow 它崩溃了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64796825/

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