gpt4 book ai didi

ios - 消息线程的左对齐 `MessageKit` swift

转载 作者:行者123 更新时间:2023-12-05 06:25:40 29 4
gpt4 key购买 nike

我正在使用 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

P.S:请不要介意设计,对齐是目前的问题

最佳答案

->在MessagesDataSource中创建一个函数

    public extension MessagesDataSource {
func isFromUser1Custom(message: MessageType) -> Bool {
if UserDefaults.standard.getChatStyle() == .Snapchat {
return true
}
return message.sender.id == "user1"
}
}

转到 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))
}
}
}

关于ios - 消息线程的左对齐 `MessageKit` swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56825700/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com