iOS - NSMutableAttributedString (可变字体属性字符串)

在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。
NSMuttableAttstring 方法
为某一范围内文字设置多个属性

  • (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阴影
    例子一:
UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
testLabel.backgroundColor = [UIColor lightGrayColor];
testLabel.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"];
[AttributedStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:16.0]
range:NSMakeRange(2, 2)];
[AttributedStr addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(2, 2)];
testLabel.attributedText = AttributedStr;
[self.view addSubview:testLabel];

效果:


例子二:


UILabel *titleView =[[UILabel alloc] init];
titleView.width=200;
titleView.height=100;
titleView.textAlignment=NSTextAlignmentCenter;//自动换行titleView.numberOfLines =0;
titleView.y=50;
NSString*str = [NSString stringWithFormat:@"%@\n%@", prefix, name];//创建一个带有属性的字符串(比如颜色属性、字体属性等文字属性)NSMutableAttributedString *attrStr =[[NSMutableAttributedString alloc] initWithString:str];//添加属性[attrStr addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:16] range:[str rangeOfString:prefix]];
[attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:[str rangeOfString:name]];
titleView.attributedText= attrStr;

例子二中,range:[str rangeOfString:name] 找到name 有str 所在的范围。
删除:


NSString *marketPrice = [NSString stringWithFormat:@"¥%d",4302];
NSMutableAttributedString*attrStr =[[NSMutableAttributedString alloc] initWithString:marketPrice];
[attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid| NSUnderlineStyleSingle) range:NSMakeRange(0, marketPrice.length)];

文字换行


UILabel *tips = [[UILabel alloc]initWithFrame:CGRectMake(20,16, kScreenWidth -20,45)];
[tips setTextColor:[UIColor grayColor]];
[tips setText:@"支付密码必须为6位数字组合。\n您可依次进入 '功能列表' -> '安全中心' 修改支付密码。"];
[tips setFont:[UIFont boldSystemFontOfSize:12]];
tips.textAlignment=NSTextAlignmentLeft;
tips.numberOfLines=0;//关键一句

你可能感兴趣的:(iOS - NSMutableAttributedString (可变字体属性字符串))