在 UITableview 中平滑滚动以显示聊天记录
Posted
技术标签:
【中文标题】在 UITableview 中平滑滚动以显示聊天记录【英文标题】:Smooth Scroll in UITableview to show chat history 【发布时间】:2016-12-02 09:16:20 【问题描述】:我正在开发聊天应用程序。我有一个视图控制器来在表格视图中显示消息。在选择特定聊天时,我将获取 12 条最近的消息并重新加载表格并将其滚动到底部,以便用户可以看到最近的消息(索引 11)。 当用户开始向上滚动时(当他到达第 0 个索引时),我需要通过 Web 服务获取历史记录并以相同的顺序平滑地显示在 UI 上。
显示单元格的代码
cell = STBubbleTableViewCell.init(style: .Subtitle, reuseIdentifier: cellIdentifier)
cell.backgroundColor = self.chatTableView?.backgroundColor
cell.selectionStyle = .None
cell.dataSource = self
cell.delegate = self
let chat = chatMessages[indexPath.row]
cell.textLabel?.font = UIFont.systemFontOfSize(14.0)
cell.textLabel?.text = chat.message
if(self.isGroupChat)
cell.detailTextLabel?.text = NSString.init(format: "%@ %@", chat.authorName, chat.messageDate.toShortTimeString()) as String
else
cell.detailTextLabel?.text = chat.messageDate.toShortTimeString()
cell.authorType = chat.authorType == 0 ? AuthorType.STBubbleTableViewCellAuthorTypeSelf : AuthorType.STBubbleTableViewCellAuthorTypeOther
cell.bubbleColor = chat.bubbleType == 0 ? BubbleColor.STBubbleTableViewCellBubbleColorGreen : BubbleColor.STBubbleTableViewCellBubbleColorGray
获取聊天记录的代码
func scrollViewWillBeginDragging(scrollView: UIScrollView)
pointNow = scrollView.contentOffset
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool)
if (scrollView.contentOffset.y < pointNow.y)
self.fetchChatHistory()
self.fetchChatHistory 被多次调用。如何避免这种多次调用?
【问题讨论】:
你检查了吗? github.com/jessesquires/JSQMessagesViewController 我没用过JSQMessageViewController。我使用 STTableviewCell 在我的 tableview 中显示消息。 您想通过 scrollViewWillBeginDragging 和 scrollViewDidEndDragging 调用获得什么? 我正在调用网络服务并获取聊天记录 【参考方案1】:使用 scrollViewWillBeginDragging 和 scrollViewDidEndDragging 调用,您可以在每次滚动时调用 fetching,无论用户没有到达表的末尾。 相反,您需要实现 tableview 无限滚动:
看看:UITableView infinite scrolling
【讨论】:
以上是关于在 UITableview 中平滑滚动以显示聊天记录的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 令人敬畏的优化AVPlayer,可在UICollectionView / UITableView中平滑滚动AVPlayerLayer(在iOS10 +上测试)
c_cpp 令人敬畏的优化AVPlayer,可在UICollectionView / UITableView中平滑滚动AVPlayerLayer(在iOS10 +上测试)