自定义NSAttributedString分类
// NSAttributedString+Additon.h
#import <UIKit/UIKit.h>
@interface NSAttributedString (Additon)
/// 使用图像和文本生成上下排列的属性文本
///
/// @param image 图像
/// @param imageWH 图像宽高
/// @param title 标题文字
/// @param fontSize 标题字体大小
/// @param titleColor 标题颜色
/// @param spacing 图像和标题间距
///
/// @return 属性文本
+ (instancetype)imageTextWithImage:(UIImage*)image imageWH:(CGFloat)imageWH title:(NSString*)title fontSize:(CGFloat)fontSize titleColor:(UIColor*)titleColor spacing:(CGFloat)spacing;
@end
自定义NSAttributedString分类
//
// NSAttributedString+Additon.m
#import "NSAttributedString+Additon.h"
@implementation NSAttributedString (Additon)
+ (instancetype)imageTextWithImage:(UIImage *)image imageWH:(CGFloat)imageWH title:(NSString *)title fontSize:(CGFloat)fontSize titleColor:(UIColor *)titleColor spacing:(CGFloat)spacing {
// 文本字典
NSDictionary *titleDict = @{NSFontAttributeName : [UIFont systemFontOfSize:fontSize],
NSForegroundColorAttributeName : titleColor};
NSDictionary *spacingDict = @{NSFontAttributeName : [UIFont systemFontOfSize:spacing]};
// 图片文本
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = image;
attachment.bounds = CGRectMake(, , imageWH, imageWH);
NSAttributedString *imageText = [NSAttributedString attributedStringWithAttachment:attachment];
// 换行文本
NSAttributedString *lineText = [[NSAttributedString alloc] initWithString:@"\n\n" attributes:spacingDict];
// 按钮文字
NSAttributedString *text = [[NSAttributedString alloc] initWithString:title attributes:titleDict];
// 合并文字
NSMutableAttributedString *attM = [[NSMutableAttributedString alloc] initWithAttributedString:imageText];
[attM appendAttributedString:lineText];
[attM appendAttributedString:text];
return attM.copy;
}
@end
在按钮中使用图文混排
UIButton *btn = [[UIButton alloc]init];
// 创建图文混排规则(按钮-->图片&文字)
NSAttributedString *attrStr = [NSAttributedString imageTextWithImage:[UIImage imageNamed:imageName] imageWH: title:title fontSize: titleColor:[UIColor whiteColor] spacing:];
// 设置图文混排
[btn setAttributedTitle:attrStr forState:UIControlStateNormal];
// 设置自动换行
btn.titleLabel.numberOfLines = ;
// 设置文字居中
btn.titleLabel.textAlignment = NSTextAlignmentCenter;