自定義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;