前一阵子在做项目的时候涉及到了图文混排的内容,用的是
NSMutableAttributedString
,今天正好整理下,以便日后查阅
先来看一个小例子,实现表情图片和文字的混排效果,这里我们用Swift
来实现:
class ViewController: UIViewController {
@IBOutlet weak var demoLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let attrStr = NSAttributedString(string: "欢迎再次回来:", attributes: [NSForegroundColorAttributeName : UIColor.red])
let attrStr1 = NSAttributedString(string: "Adinm", attributes: [NSForegroundColorAttributeName : UIColor.blue])
// 图文混排
let attacment = NSTextAttachment()
attacment.image = UIImage(named: "d_aini")
// 获取文字字体
let font = demoLabel.font
attacment.bounds = CGRect(x: 0, y: -4, width: (font?.lineHeight)!, height: (font?.lineHeight)!)
let attrImageStr = NSAttributedString(attachment: attacment)
let attrMStr = NSMutableAttributedString()
attrMStr.append(attrStr)
attrMStr.append(attrImageStr)
attrMStr.append(attrStr1)
demoLabel.attributedText = attrMStr
}
}
通过上面的代码我们可以看到通过NSTextAttachment
可以将图片以附件的形式插入到属性文字中来达到我们想要的效果;
下面我们通过OC
在来实现一遍:
NSString *str =@"欢迎再次回来:Admin";
// 创建一个带有属性的字符串(比如颜色属性、字体属性等文字属性)
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:str];
// addAttribute:添加某一个具体属性,添加一条删除线;
[attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleDouble) range:[str rangeOfString:@"Admin"]];
//addAttributes:添加多个属性
NSMutableDictionary * dic=[NSMutableDictionary dictionary];
dic[NSFontAttributeName]=[UIFont boldSystemFontOfSize:26];
dic[NSForegroundColorAttributeName]=[UIColor redColor];
[attrStr addAttributes:dic range:[str rangeOfString:@"Admin"]];
self.lblTitle.attributedText = attrStr;
NSMutableAttributedString常见方法
为某一范围内文字设置多个属性
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;
为某一范围内文字添加某个属性
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
为某一范围内文字添加多个属性
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
移除某范围内的某个属性
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
常见的属性及说明
NSFontAttributeName
字体
NSParagraphStyleAttributeName
段落格式
NSForegroundColorAttributeName
字体颜色
NSBackgroundColorAttributeName
背景颜色
NSStrikethroughStyleAttributeName
删除线格式
NSUnderlineStyleAttributeName
下划线格式
NSStrokeColorAttributeName
删除线颜色
NSStrokeWidthAttributeName
删除线宽度
NSShadowAttributeName
阴影