Files
MessageKit/Example/Sources/Models/CustomTextLayoutSizeCalculator.swift
T
2021-05-01 21:38:20 +05:30

65 lines
2.4 KiB
Swift

//
// CustomTextMessageSizeCalculator.swift
// ChatExample
//
// Created by Vignesh J on 30/04/21.
// Copyright © 2021 MessageKit. All rights reserved.
//
import UIKit
import MessageKit
class CustomTextLayoutSizeCalculator: CustomLayoutSizeCalculator {
var messageLabelFont = UIFont.preferredFont(forTextStyle: .body)
var cellMessageContainerRightSpacing: CGFloat = 16
override func messageContainerSize(for message: MessageType,
at indexPath: IndexPath) -> CGSize {
let size = super.messageContainerSize(for: message,
at: indexPath)
let labelSize = self.messageLabelSize(for: message,
at: indexPath)
let selfWidth = labelSize.width +
self.cellMessageContentHorizontalPadding +
self.cellMessageContainerRightSpacing
let width = max(selfWidth, size.width)
let height = size.height + labelSize.height
return CGSize(width: width,
height: height)
}
func messageLabelSize(for message: MessageType,
at indexPath: IndexPath) -> CGSize {
let attributedText: NSAttributedString
let textMessageKind = message.kind
switch textMessageKind {
case .attributedText(let text):
attributedText = text
case .text(let text), .emoji(let text):
attributedText = NSAttributedString(string: text, attributes: [.font: messageLabelFont])
default:
fatalError("messageLabelSize received unhandled MessageDataType: \(message.kind)")
}
let maxWidth = self.messageContainerMaxWidth -
self.cellMessageContentHorizontalPadding -
self.cellMessageContainerRightSpacing
return attributedText.size(consideringWidth: maxWidth)
}
func messageLabelFrame(for message: MessageType,
at indexPath: IndexPath) -> CGRect {
let origin = CGPoint(x: self.cellMessageContentHorizontalPadding / 2,
y: self.cellMessageContentVerticalPadding / 2)
let size = self.messageLabelSize(for: message,
at: indexPath)
return CGRect(origin: origin,
size: size)
}
}