`MessageKit`中消息线程的左对齐

3
我正在使用MessageKit库实现一个简单的聊天界面。如第一张截图所示,一切都很正常,但是我被要求将所有线程对齐到左侧(第二张截图)。我尝试找到改变线程对齐方式的方法,但是我找不到。如果有人能帮助我找到解决方法,我会非常感激。
这是我的代码的一部分:
extension ConversationDataSource: MessagesDisplayDelegate {

    // MARK: - MessagesDisplayDelegate implementation

    func messageStyle(for message: MessageType, at indexPath: IndexPath,
                      in messagesCollectionView: MessagesCollectionView) -> MessageStyle {
        return .bubbleTail(isFromCurrentSender(message: message) ? .topRight : .topLeft, .curved)
    }

    func backgroundColor(for message: MessageType, at  indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UIColor {
        return isFromCurrentSender(message: message) ? .aeroBlue : .white
    }

    func textColor(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UIColor {
        return .black
    }

    func enabledDetectors(for message: MessageType, at indexPath: IndexPath,
                          in messagesCollectionView: MessagesCollectionView) -> [DetectorType] {
        return [.url, .address, .phoneNumber, .date]
    }

    func detectorAttributes(for detector: DetectorType, and message: MessageType,
                            at indexPath: IndexPath) -> [NSAttributedString.Key: Any] {
        // Project doesn't build with Xcode 10 without implementing this explicitly
        return [NSAttributedString.Key.foregroundColor: UIColor.darkText,
                NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue,
                NSAttributedString.Key.underlineColor: UIColor.darkText]
    }
}

screenshot 1 screenshot 2

附言:目前请不要在意设计,对齐是当前的问题。

1个回答

1
-> 在MessagesDataSource中创建一个函数
    public extension MessagesDataSource {
        func isFromUser1Custom(message: MessageType) -> Bool {
            if UserDefaults.standard.getChatStyle() == .Snapchat {
                return true
            }
            return message.sender.id == "user1"
        }
    }

Go MessagesCollectionViewFlowLayout


fileprivate extension MessagesCollectionViewFlowLayout {

    func avatarPosition(for attributes: MessageIntermediateLayoutAttributes) -> AvatarPosition {
        var position = messagesLayoutDelegate.avatarPosition(for: attributes.message, at: attributes.indexPath, in: messagesCollectionView)

        switch position.horizontal {
        case .cellTrailing, .cellLeading:
            break
        case .natural:
            position.horizontal = messagesDataSource.**isFromUser1Custom**(message: attributes.message) ? .cellLeading : .cellTrailing
        }

        return position
    }
}

您的 ChatViewController
extension ChatViewController: MessagesDisplayDelegate {

    func messageStyle(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageStyle {
//do what you want to
        let corner: MessageStyle.TailCorner = isFromUser1Custom ? .bottomRight : .bottomLeft
            return  MessageStyle.bubbleTail(corner, .curved)
    }

}




extension ChatViewController: MessagesLayoutDelegate {

    func messagePadding(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UIEdgeInsets {
        if isFromUser1Custom(message: message) {
            return UIEdgeInsets(top: 0, left: 4, bottom: 0, right: 30)
        }
        else {
            return UIEdgeInsets(top: 0, left: 30, bottom: 0, right: 4)
        }
    }

    func cellTopLabelAlignment(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> LabelAlignment {
        if isFromUser1Custom(message: message) {
            return .messageLeading(UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0))
        }
        else {
            return .messageTrailing(UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 10))
        }
    }

    func cellBottomLabelAlignment(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> LabelAlignment {
        if isFromUser1Custom(message: message) {
            return .messageLeading(UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0))
        } else {
            return .messageTrailing(UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 10))
        }
    }

    func cellTopupLabelAlignment(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> LabelAlignment {

        if isFromUser1Custom(message: message) {
            return .messageLeading(UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10))
        }
        else {
            return .messageTrailing(UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10))
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接