В настоящее время я разрабатываю приложение чата iOS с набором сообщений. Проверил при большом количестве сообщений (около 1000). Я вижу, что пользовательский интерфейс очень медленно реагирует, когда я нажимаю на панель ввода, чтобы начать печатать, или при вставке нового сообщения. Я попытался отладить и увидеть, что этот метод вызывается несколько раз, чтобы пересчитать высоту нижней метки для всего сообщения, когда я нажимаю панель ввода (клавиатура медленно реагирует), вставляю новое сообщение (кнопка отправки немного зависает). Как вы можете видеть в журналах ниже.
messageBottomLabelHeight called - section: 0
messageBottomLabelHeight called - section: 1
messageBottomLabelHeight called - section: 2
messageBottomLabelHeight called - section: 3
messageBottomLabelHeight called - section: 4
messageBottomLabelHeight called - section: 5
messageBottomLabelHeight called - section: 6
messageBottomLabelHeight called - section: 7
messageBottomLabelHeight called - section: 8
messageBottomLabelHeight called - section: 9
messageBottomLabelHeight called - section: 10
messageBottomLabelHeight called - section: 11
messageBottomLabelHeight called - section: 12
messageBottomLabelHeight called - section: 13
...............
messageBottomLabelHeight called - section: 1000
Мой код:
extension AdvancedChatViewController: MessagesLayoutDelegate {
func cellTopLabelHeight(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CGFloat {
if isTimeLabelVisible(at: indexPath) {
return 18
}
return 0
}
func messageTopLabelHeight(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CGFloat {
if isFromCurrentSender(message: message) {
return !isPreviousMessageSameSender(at: indexPath) ? 20 : 0
} else {
return !isPreviousMessageSameSender(at: indexPath) ? (20 + outgoingAvatarOverlap) : 0
}
}
func messageBottomLabelHeight(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CGFloat {
print("messageBottomLabelHeight called - section: \(indexPath.section)")
return (!isNextMessageSameSender(at: indexPath) && isFromCurrentSender(message: message)) ? 16 : 0
}
}
Пожалуйста, помогите мне!