MOUserNotificationCellData.m 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //
  2. // MOUserNotificationCellData.m
  3. // TUIChat
  4. //
  5. // Created by SuperC on 2025/10/13.
  6. //
  7. #import "MOUserNotificationCellData.h"
  8. @implementation MOUserNotificationCellData
  9. + (TUIMessageCellData *)getCellData:(V2TIMMessage *)message {
  10. NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil];
  11. if (param == nil) {
  12. return nil;
  13. }
  14. MOUserNotificationCellData *cellData = [[MOUserNotificationCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming];
  15. cellData.reuseId = @"MOUserNotificationCell";
  16. cellData.innerMessage = message;
  17. cellData.type = [[MOUserNotificationCellData objectOrNilForKey:@"type" fromDictionary:param] integerValue];
  18. cellData.img = [MOUserNotificationCellData objectOrNilForKey:@"img" fromDictionary:param];
  19. cellData.title = [MOUserNotificationCellData objectOrNilForKey:@"title" fromDictionary:param];
  20. cellData.content = [MOUserNotificationCellData objectOrNilForKey:@"content" fromDictionary:param];
  21. cellData.link = [MOUserNotificationCellData objectOrNilForKey:@"link" fromDictionary:param];
  22. cellData.linkStr = [MOUserNotificationCellData objectOrNilForKey:@"linkStr" fromDictionary:param];
  23. return cellData;
  24. }
  25. + (NSString *)getDisplayString:(V2TIMMessage *)message {
  26. NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil];
  27. if (param == nil) {
  28. return nil;
  29. }
  30. NSString *contentStr = [MOUserNotificationCellData objectOrNilForKey:@"content" fromDictionary:param];
  31. if(contentStr.length > 0){
  32. return contentStr;
  33. }
  34. return message.customElem.desc;
  35. }
  36. - (CGSize)contentSize{
  37. //文字内容显示区域
  38. CGFloat viewWidth = [[UIScreen mainScreen] bounds].size.width - 15.0 * 2.0;
  39. CGFloat contentWidth = viewWidth - 10.0 * 2.0;
  40. //标题以上固定距离
  41. CGFloat titleTopSpacing = 8.0;
  42. //标题高度
  43. CGFloat titleHeight = 0;
  44. if (self.title.length > 0) {
  45. UIFont *titleFont = [MOUserNotificationCellData getTheFontWithSize:12.0 AndFontName:@"Inter-Regular_Medium"];
  46. titleHeight = [self.title boundingRectWithSize:CGSizeMake(contentWidth, MAXFLOAT)
  47. options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : titleFont}
  48. context:nil].size.height + 2;//2是补偿高度
  49. }
  50. //内容高度
  51. CGFloat contentHeight = 0;
  52. if(self.content.length > 0){
  53. UIFont *contentFont = [MOUserNotificationCellData getTheFontWithSize:10.0 AndFontName:@"Inter-Regular"];
  54. contentHeight = [self.content boundingRectWithSize:CGSizeMake(contentWidth, MAXFLOAT)
  55. options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
  56. attributes:@{NSFontAttributeName : contentFont}
  57. context:nil].size.height;
  58. }
  59. //30是bgView上下距离
  60. CGFloat bgViewBottomSpacing = 8.0;
  61. CGFloat totalHeight = titleTopSpacing + titleHeight + 2.0 + contentHeight + bgViewBottomSpacing;
  62. CGSize size = CGSizeMake(245, ceilf(totalHeight));
  63. return size;
  64. }
  65. #pragma mark - Tools
  66. + (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
  67. {
  68. id object = [dict objectForKey:aKey];
  69. return [object isEqual:[NSNull null]] ? nil : object;
  70. }
  71. + (UIFont *)getTheFontWithSize:(CGFloat)fontSize AndFontName:(NSString *)fontName{
  72. UIFont *customFont = [UIFont fontWithName:fontName size:fontSize];
  73. if(!customFont){
  74. customFont = [MOUserNotificationCellData MODisplayFontWithSize:fontSize bold:YES itatic:NO weight:UIFontWeightMedium];
  75. }
  76. return customFont;
  77. }
  78. + (UIFont *)MODisplayFontWithSize:(CGFloat)fontSize
  79. bold:(BOOL)bold itatic:(BOOL)italic weight:(UIFontWeight)weight {
  80. UIFont *font = [UIFont systemFontOfSize:fontSize weight:weight];
  81. UIFontDescriptorSymbolicTraits symbolicTraits = 0;
  82. if (italic) {
  83. symbolicTraits |= UIFontDescriptorTraitItalic;
  84. }
  85. if (bold) {
  86. symbolicTraits |= UIFontDescriptorTraitBold;
  87. }
  88. UIFont *specialFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:symbolicTraits] size:font.pointSize];
  89. return specialFont;
  90. }
  91. @end