我一直在尝试创建一个可以重用的聊天界面.我差不多完成了实现,但有些事情让我不禁烦恼.如果我在第一次加载界面时开始加载像gif这样的消息,你可以看到在第4条消息之后有3条消息没有滚动到底部.第8个是第一个最终滚动的.这取决于屏幕尺寸.在iPhone 6s测试设备上,它到达第9条消息,即滚动的消息.
我正在使用内容插入作为保持集合视图可见的方法,每次底部的UIToolbar框架更改时运行以下代码
toolBar.inputAccessoryViewFrameChanged = {(rect: CGRect) in Void()
let navigationAndStatusHeight = self.navigationController != nil && self.navigationController!.navigationBar.isTranslucent ? self.navigationController!.navigationBar.frame.size.height + UIApplication.shared.statusBarFrame.height : 0
self.collectionView.contentInset = UIEdgeInsets(top: navigationAndStatusHeight + 8, left: 8, bottom: UIScreen.main.bounds.height - rect.origin.y + 8, right: 8)
self.collectionView.scrollIndicatorInsets.bottom = UIScreen.main.bounds.height - rect.origin.y
}
Run Code Online (Sandbox Code Playgroud)
每次插入新消息时都会运行此代码:
func insertNewMessage(){
self.collectionView.performBatchUpdates({
self.collectionView.insertItems(at: [NSIndexPath(item: self.numberOfMessages() - 1, section: 0) as IndexPath])
}) { (Bool) in
self.scrollToBottom(animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
scrollToBottom函数是:
func scrollToBottom(animated: Bool){
guard self.numberOfMessages() > 0 else{
return
}
self.collectionView.scrollToItem(at: IndexPath(item: self.numberOfMessages() …Run Code Online (Sandbox Code Playgroud) 我正在记录我公司的iOS应用程序的代码,现在我转向了具有完成处理程序的方法.是否有记录完成处理程序的特定方法,或者我应该将其作为参数的一部分?
例如:
/**
Description
- Parameters:
- parameter1: description
- parameter2: description
- completion: description
*/
Run Code Online (Sandbox Code Playgroud)
这是正确的方式还是有另一种更好的方法?或者它应该在文档的"返回"部分?
谢谢