// // KBFunctionTagCell.m // CustomKeyboard // // Created by Codex on 2025/10/28. // #import "KBFunctionTagCell.h" #import "Masonry.h" @interface KBFunctionTagCell () @property (nonatomic, strong) UILabel *titleLabelInternal; @property (nonatomic, strong) UIImageView *iconViewInternal; @property (nonatomic, strong) UIActivityIndicatorView *loadingView; @end @implementation KBFunctionTagCell - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.contentView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.9]; self.contentView.layer.cornerRadius = 12; self.contentView.layer.masksToBounds = YES; // 小菊花:默认隐藏,放在整体内容右侧偏内的位置 [self.contentView addSubview:self.loadingView]; [self.loadingView mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.contentView); make.width.height.mas_equalTo(16); }]; // 中心容器:将 icon + title 组合整体水平居中 UIView *centerContainer = [[UIView alloc] init]; centerContainer.backgroundColor = [UIColor clearColor]; [self.contentView addSubview:centerContainer]; [centerContainer mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.contentView.mas_centerX); make.centerY.equalTo(self.contentView.mas_centerY); make.left.greaterThanOrEqualTo(self.contentView.mas_left).offset(6); make.right.lessThanOrEqualTo(self.contentView).offset(-6); }]; [centerContainer addSubview:self.iconViewInternal]; [centerContainer addSubview:self.titleLabelInternal]; [self.iconViewInternal mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(centerContainer.mas_left); make.centerY.equalTo(centerContainer.mas_centerY); // 留出一点余量,避免 emoji 字形在右侧被裁剪 make.width.height.mas_equalTo(24); }]; [self.titleLabelInternal mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.iconViewInternal.mas_right).offset(3); make.top.equalTo(centerContainer.mas_top); make.bottom.equalTo(centerContainer.mas_bottom); make.right.equalTo(centerContainer.mas_right); }]; } return self; } #pragma mark - Lazy - (UIImageView *)iconViewInternal { if (!_iconViewInternal) { _iconViewInternal = [[UIImageView alloc] init]; UILabel *emoji = [[UILabel alloc] init]; emoji.text = @"🙂"; // 占位图标 emoji.textAlignment = NSTextAlignmentCenter; emoji.font = [UIFont systemFontOfSize:20]; emoji.adjustsFontSizeToFitWidth = YES; emoji.minimumScaleFactor = 0.8; [_iconViewInternal addSubview:emoji]; [emoji mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(_iconViewInternal); }]; } return _iconViewInternal; } - (UILabel *)titleLabelInternal { if (!_titleLabelInternal) { _titleLabelInternal = [[UILabel alloc] init]; _titleLabelInternal.font = [KBFont medium:10]; _titleLabelInternal.textColor = [UIColor colorWithHex:0x1B1F1A]; // 最多两行,文本过长时末尾截断 _titleLabelInternal.numberOfLines = 2; _titleLabelInternal.lineBreakMode = NSLineBreakByTruncatingTail; } return _titleLabelInternal; } #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 static UIActivityIndicatorViewStyle KBSpinnerStyle(void) { return UIActivityIndicatorViewStyleMedium; } #else static UIActivityIndicatorViewStyle KBSpinnerStyle(void) { return UIActivityIndicatorViewStyleGray; } #endif - (UIActivityIndicatorView *)loadingView { if (!_loadingView) { _loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:KBSpinnerStyle()]; _loadingView.hidesWhenStopped = YES; _loadingView.color = [UIColor grayColor]; _loadingView.hidden = YES; } return _loadingView; } #pragma mark - Expose - (UILabel *)titleLabel { return self.titleLabelInternal; } - (UIImageView *)iconView { return self.iconViewInternal; } - (void)setLoading:(BOOL)loading { if (loading) { self.loadingView.hidden = NO; [self.loadingView startAnimating]; } else { [self.loadingView stopAnimating]; self.loadingView.hidden = YES; } } @end