【发布时间】:2017-01-02 07:25:59
【问题描述】:
我正在尝试模拟 Whatsapp 聊天,任何单元格都会有一个图像(对于气泡的尾部),一个只是带有颜色和一些角半径的视图的气泡以及一个代表消息文本的标签。
我在通话前后打印了一张照片
self.messagesTableView.reloadData()
一旦调用后打印,tableView 会持续一段时间,直到数据显示出来,我才知道是什么。在 indexpath 处插入行也是如此,显示插入动画需要一些时间。
func displayMessages(viewModel: GroupChatMessages.GetChatMessages.ViewModel) {
let displayedMessage = viewModel.displayedMessages
print ("i'm here!")
messages = displayedMessage!
//self.messagesTableView.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true)
self.messagesTableView.reloadData()
print ("i'm here2!")
firstTime = false
self.setVisible(hiddenTableView: false, hiddenChatLoader: true)
self.scrollToLastMessage(false)
self.messagesLoaded = true
}
我尝试使用队列进行调度,以及 reloadData() 之前的注释行,但没有任何效果,也没有任何代表有意义的时间。
也许是为了泡沫的形象?我不知道。我在 Assets 上保存了这张图片,所以我没有从互联网上下载它。
self.setVisible 只是隐藏加载器并显示 tableView 但我尝试过将其向上移动并且没有任何变化。如果您需要任何进一步的信息,请告诉我。谢谢!
编辑:
嗯,我已经看到问题出在滚动到最后一个单元格,这是它花费大部分时间的地方。
func scrollToLastMessage(animated: Bool) {
let section = 0
let lastItemIndex = self.messagesTableView.numberOfRowsInSection(section) - 1
let indexPath:NSIndexPath = NSIndexPath.init(forItem: lastItemIndex, inSection: section)
self.messagesTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: animated)
self.scrollDownButton.hidden = true
}
有一种优化滚动的可能性,因为我必须做一个滚动,因为一旦加载数据,我看到的第一行是 tableView 的顶行,但我想看到底部的(最后的)。谢谢!
【问题讨论】:
标签: ios swift xcode uitableview