MessageKit: messageBottomLabelHeight вызывается для всех сообщений (не только для видимых сообщений) - PullRequest
0 голосов
/ 04 августа 2020

В настоящее время я разрабатываю приложение чата 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
    }

}

Пожалуйста, помогите мне!

...