在表格视图和性能中滚动底部
Posted
技术标签:
【中文标题】在表格视图和性能中滚动底部【英文标题】:Scrolling bottom in tableview and performance 【发布时间】:2016-07-14 20:09:13 【问题描述】:我需要滚动到底部。我有一个像whatsapp这样的聊天应用程序。所以当视图出现时,表格视图应该显示最后一行。我通过以下方式实现了这一点并且效果很好。
tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: false)
当键盘出现时,我还需要滚动到底部。我正在使用自动布局,上面的行不起作用。为此,我使用以下行:
func scrollToLastRow(animated: Bool)
if self.numberOfRowsInSection(0) > 0
self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated)
这是 Tableview 的扩展。
当没有太多消息时,此解决方案可以正常工作。然后我尝试了 5000 条消息(所以 tableview 有 5000 行,但我正在分页它们)当键盘出现时,我看到 cpu 使用率为 %98-100。我认为第二个代码是分页问题,它会导致将每条消息加载到 ram 并且我的应用程序冻结并收到 ram 警告。
如何在没有任何性能问题的情况下滚动到底部?
【问题讨论】:
您找到解决方案了吗?也使用领域。 【参考方案1】:如果您有分页,您可以尝试只加载当前页面以及最后一页,假设每个页面中有 20 条消息,在这种情况下,您的表格只有 40 行。然后你就可以使用你的函数了:
func scrollToLastRow(animated: Bool)
if self.numberOfRowsInSection(0) > 0
self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated)
【讨论】:
我正在使用领域,它有一个自动分页系统。所以我不能这样做。【参考方案2】:试试这个方法:
let delay = 0.1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(),
let numberOfSections = self.tableView.numberOfSections
let numberOfRows = self.tableView.numberOfRowsInSection(numberOfSections-1)
if numberOfRows > 0
let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1))
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
)
【讨论】:
【参考方案3】:如果您正在创建 IM 应用程序。我建议你reversetableView
。
所以第一行出现在底部,不再需要在开始时滚动。
这里有一个 cocoapod 可以提供帮助:https://github.com/marty-suzuki/ReverseExtension
如果您仍想滚动到特定行
实现UIScrollViewDelegate.scrollViewDidEndScrollingAnimation
。
然后就是这样。
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView)
if scrollView.contentSize.height > lastContentHeight
self.tableView.scrollToBottom()
self.lastContentHeight = scrollView.contentSize.height
【讨论】:
以上是关于在表格视图和性能中滚动底部的主要内容,如果未能解决你的问题,请参考以下文章