TSLayoutSizeCalculator.swift 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. //
  2. // CustomLayoutSizeCalculator.swift
  3. // ChatExample
  4. //
  5. // Created by Vignesh J on 01/05/21.
  6. // Copyright © 2021 MessageKit. All rights reserved.
  7. //
  8. import MessageKit
  9. import UIKit
  10. class TSLayoutSizeCalculator: MessageSizeCalculator {//CellSizeCalculator {
  11. // override init(layout: MessagesCollectionViewFlowLayout? = nil) {
  12. // super.init()
  13. // self.layout = layout
  14. // }
  15. // var messagesLayout: MessagesCollectionViewFlowLayout {
  16. // layout as! MessagesCollectionViewFlowLayout
  17. // }
  18. static let topSpaceH = 0.0
  19. static let bottomSpaceH = 0.0
  20. static var avatarSize = CGSizeMake(40, 40)
  21. //MARK: ###################################左边头像###################################
  22. // static var leadingAvatarEdge:UIEdgeInsets = UIEdgeInsets(top: topSpaceH, left: 16, bottom: 0, right: 0)
  23. // static var leadingAvatarSize = CGSizeMake(40, 40)
  24. static var leadingAvatarEdge:UIEdgeInsets = UIEdgeInsets(top: topSpaceH, left: 0, bottom: 0, right: 0)
  25. static var leadingAvatarSize = CGSizeMake(0, 0)
  26. //MARK: ###################################右边头像###################################
  27. static var traingAvatarEdge:UIEdgeInsets = UIEdgeInsets(top: topSpaceH, left: 0, bottom: 0, right: 0)
  28. static var traingAvatarSize = CGSizeMake(0, 0)
  29. //MARK: ###################################消息容器###################################
  30. //消息容器的 UIEdgeInsets
  31. // static var cellMessageContainerLeadingEdge:UIEdgeInsets = UIEdgeInsets(top: topSpaceH, left: 8, bottom: 0, right: 16)
  32. static var cellMessageContainerLeadingEdge:UIEdgeInsets = UIEdgeInsets(top: topSpaceH, left: 16, bottom: 0, right: 16)
  33. static var cellMessageContainerTraingEdge:UIEdgeInsets = UIEdgeInsets(top: topSpaceH, left: 16, bottom: 0, right: 16)
  34. static var cellMessageContainerMinSize:CGSize = CGSizeMake(48, 48)
  35. //消息容器最大宽度
  36. lazy var messageContainerLeadingMaxWidth: CGFloat = {
  37. //左头像
  38. var cellMessageContainerMaxWidth = messagesLayout.itemWidth - Self.leadingAvatarEdge.left - Self.leadingAvatarSize.width
  39. //容器 填充
  40. cellMessageContainerMaxWidth = cellMessageContainerMaxWidth - Self.cellMessageContainerLeadingEdge.left - Self.cellMessageContainerLeadingEdge.right
  41. return cellMessageContainerMaxWidth
  42. }()
  43. lazy var messageContainerTraingMaxWidth: CGFloat = {
  44. //右头像
  45. var cellMessageContainerMaxWidth = messagesLayout.itemWidth - Self.traingAvatarEdge.right - Self.traingAvatarSize.width
  46. //容器 填充
  47. cellMessageContainerMaxWidth = cellMessageContainerMaxWidth - Self.cellMessageContainerTraingEdge.left - Self.cellMessageContainerTraingEdge.right
  48. return cellMessageContainerMaxWidth
  49. }()
  50. var messagesDataSource: MessagesDataSource {
  51. self.messagesLayout.messagesDataSource
  52. }
  53. //cell itemSize
  54. override func sizeForItem(at indexPath: IndexPath) -> CGSize {
  55. let dataSource = messagesDataSource
  56. let message = dataSource.messageForItem(at: indexPath,in: messagesLayout.messagesCollectionView)
  57. let itemHeight = cellContentHeight(for: message,at: indexPath,fromCurrentSender:dataSource.isFromCurrentSender(message: message))
  58. return CGSize(width: messagesLayout.itemWidth,height: itemHeight)
  59. }
  60. //消息容器的高度
  61. func cellContentHeight(for message: MessageType,at indexPath: IndexPath,fromCurrentSender: Bool)-> CGFloat {
  62. return Self.cellMessageContainerMinSize.height
  63. }
  64. }