如何在获得UITableViewCell的确切位置的同时优化滚动UITableView?

时间:2018-09-06 15:17:12

标签: ios swift uitableview performance-testing

想象一下一个普通的UITableView,其中包含200行的列表。 其中一些行是自定义的,伪装成UI Section标题行,并支持到达顶部时为粘性

非常类似于股票iOS Contacts 应用。

当用户滚动表视图时,它会跟踪那些自定义节行在滚动视图中的位置,并管理何时应粘贴,何时应释放它们以滚动出顶部以供其他节行替换。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    ...
    for sectionRow in allSectionRows {

        let sectionRowRect = tableView.rectForRow(at: sectionRow.indexPath)
        let rowPositionY = sectionRowRect.origin.y + -tableView.contentOffset.y

        // ... compare rowPositionY if it has reached or passed
        // its sticky location in tableview
    }
    ...
}

虽然这种方法可以很好地跟踪每一行的位置,但是我发现将其与约50个节的行进行缩放会对性能产生影响。导致较慢的iOS设备以〜10-15fps的速度滚动,从而破坏了流畅的用户体验。

在我的测试中表明,tableView.rectForRow()tableView.contentOffset.y是处理时间的罪魁祸首。立即删除其中任何一个均可改善滚动效果。当然,这样会破坏功能。

我尝试缓存sectionRowRect = tableView.rectForRow(at: sectionRow.indexPath),但是却发现了一个奇怪的伪像,其中rowPositionY似乎在漂移。

可以考虑采用哪种可能的优化来解决此循环?

0 个答案:

没有答案