iOS UI基础-17.0 UILable之NSMutableAttributedString

时间:2023-03-08 22:04:09

在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(, , , )];
testLabel.backgroundColor = [UIColor lightGrayColor]; testLabel.textAlignment = NSTextAlignmentCenter; NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"]; [AttributedStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0] range:NSMakeRange(, )]; [AttributedStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(, )]; testLabel.attributedText = AttributedStr; [self.view addSubview:testLabel];

效果:

iOS UI基础-17.0 UILable之NSMutableAttributedString

例子二:

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

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

删除:

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

文字换行

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

参考博客:http://snowyshell.blog.163.com/blog/static/2209140342014475383375/