TUILinkCell.m 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //
  2. // MyCustomCell.m
  3. // TUIKitDemo
  4. //
  5. // Created by annidyfeng on 2019/6/10.
  6. // Copyright © 2019 Tencent. All rights reserved.
  7. //
  8. #import "TUILinkCell.h"
  9. #import <TUICore/TUIGlobalization.h>
  10. #import <TUICore/TUIThemeManager.h>
  11. @implementation TUILinkCell
  12. - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
  13. self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  14. if (self) {
  15. _myTextLabel = [[UILabel alloc] init];
  16. _myTextLabel.numberOfLines = 0;
  17. _myTextLabel.font = [UIFont systemFontOfSize:15];
  18. _myTextLabel.textAlignment = isRTL()?NSTextAlignmentRight:NSTextAlignmentLeft;
  19. _myTextLabel.textColor = TUIChatDynamicColor(@"chat_link_message_title_color", @"#000000");
  20. [self.container addSubview:_myTextLabel];
  21. _myLinkLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  22. _myLinkLabel.text = TIMCommonLocalizableString(TUIKitMoreLinkDetails);
  23. _myLinkLabel.font = [UIFont systemFontOfSize:15];
  24. _myLinkLabel.textAlignment = isRTL()?NSTextAlignmentRight:NSTextAlignmentLeft;
  25. _myLinkLabel.textColor = TUIChatDynamicColor(@"chat_link_message_subtitle_color", @"#0000FF");
  26. [self.container addSubview:_myLinkLabel];
  27. }
  28. return self;
  29. }
  30. - (void)fillWithData:(TUILinkCellData *)data;
  31. {
  32. [super fillWithData:data];
  33. self.customData = data;
  34. self.myTextLabel.text = data.text;
  35. // tell constraints they need updating
  36. [self setNeedsUpdateConstraints];
  37. // update constraints now so we can animate the change
  38. [self updateConstraintsIfNeeded];
  39. [self layoutIfNeeded];
  40. }
  41. + (BOOL)requiresConstraintBasedLayout {
  42. return YES;
  43. }
  44. // this is Apple's recommended place for adding/updating constraints
  45. - (void)updateConstraints {
  46. [super updateConstraints];
  47. CGRect rect = [self.myTextLabel.text boundingRectWithSize:CGSizeMake(245, MAXFLOAT)
  48. options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
  49. attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}
  50. context:nil];
  51. [self.myTextLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  52. make.top.mas_equalTo(10);
  53. make.leading.mas_equalTo(10);
  54. make.width.mas_equalTo(245);
  55. make.height.mas_equalTo(rect.size.height);
  56. }];
  57. [self.myLinkLabel sizeToFit];
  58. [self.myLinkLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  59. make.top.mas_equalTo(self.myTextLabel.mas_bottom).mas_offset(15);
  60. make.leading.mas_equalTo(10);
  61. make.width.mas_equalTo(self.myLinkLabel.frame.size.width);
  62. make.height.mas_equalTo(self.myLinkLabel.frame.size.height);
  63. }];
  64. }
  65. - (void)layoutSubviews {
  66. [super layoutSubviews];
  67. }
  68. #pragma mark - TUIMessageCellProtocol
  69. + (CGSize)getContentSize:(TUIMessageCellData *)data {
  70. NSAssert([data isKindOfClass:TUILinkCellData.class], @"data must be kind of TUILinkCellData");
  71. TUILinkCellData *linkCellData = (TUILinkCellData *)data;
  72. CGFloat textMaxWidth = 245.f;
  73. CGRect rect = [linkCellData.text boundingRectWithSize:CGSizeMake(textMaxWidth, MAXFLOAT)
  74. options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
  75. attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}
  76. context:nil];
  77. CGSize size = CGSizeMake(textMaxWidth + 15, rect.size.height + 56);
  78. return size;
  79. }
  80. @end