天天看點

iOS圖文混排

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