NSAttributedString用法

标签:

技术分享

以前看到这种字号和颜色不一样的字符串,想出个讨巧的办法就是“¥150”一个UILable,“元/位”一个UILable。今天翻看以前的工程,command点进UITextField中看到[attributedText]这个关键字,以前都没注意过UITextField还有这个属性,其实UITextView、UILable也有这个属性,iOS6就已经有了,说来惭愧,对此罚站1秒钟。

NSAttributedString叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体、字号、字体大小等各不相同的风格,还可以对段落进行格式化。

通过以下代码即可实现上面图示效果,十分方便,从此再也不用设置两个UILable,并且处心积虑的处理它们的长度了。

1    UILabel * aLable = [[UILabel alloc] initWithFrame:CGRectMake(100, 500, 200, 40)];

2    aLable.textAlignment = NSTextAlignmentCenter;

3    [self.view addSubview:aLable];

4

5    NSString * aString = @"¥150 元/位";

6

7    //富文本对象

8    NSMutableAttributedString * aAttributedString = [[NSMutableAttributedString alloc] initWithString:aString];

9

10    //富文本样式

11    [aAttributedString addAttribute:NSForegroundColorAttributeName  //文字颜色

12                              value:[UIColor redColor]

13                              range:NSMakeRange(0, 4)];

14

15    [aAttributedString addAttribute:NSFontAttributeName            //文字字体

16                              value:[UIFont systemFontOfSize:25]

17                              range:NSMakeRange(0, 4)];

18

19    aLable.attributedText = aAttributedString;

常用属性:

NSFontAttributeName           文字字体

NSParagraphStyleAttributeName     段落样式(字符串通过“\n”进行分段,此设置必须在lable.numberOfLines = 0时有效,value通过NSMutableParagraphStyle设置,它有以下属性)

[段落样式-插曲]

1 @property(readwrite) CGFloat lineSpacing;              //行间距

2 @property(readwrite) CGFloat paragraphSpacing;           //段间距

3 @property(readwrite) NSTextAlignment alignment;           //对齐方式

4 @property(readwrite) CGFloat firstLineHeadIndent;          //首行缩紧

5 @property(readwrite) CGFloat headIndent;               //除首行之外其他行缩进

6 @property(readwrite) CGFloat tailIndent;               //每行容纳字符的宽度

7 @property(readwrite) NSLineBreakMode lineBreakMode;         //换行方式

8 @property(readwrite) CGFloat minimumLineHeight;           //最小行高

9 @property(readwrite) CGFloat maximumLineHeight;           //最大行高

10 @property(readwrite) NSWritingDirection baseWritingDirection;  //书写方式(NSWritingDirectionNatural,NSWritingDirectionLeftToRight,NSWritingDirectionRightToLeft)

11 @property(readwrite) CGFloat lineHeightMultiple;

12 @property(readwrite) CGFloat paragraphSpacingBefore;

13 @property(readwrite) float hyphenationFactor;

14 @property(readwrite,copy,NS_NONATOMIC_IOSONLY) NSArray *tabStops NS_AVAILABLE_IOS(7_0);

15 @property(readwrite,NS_NONATOMIC_IOSONLY) CGFloat defaultTabInterval NS_AVAILABLE_IOS(7_0);

[段落样式demo]

1    UILabel * lable = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, self.view.frame.size.width-100, 200)];

2    lable.backgroundColor = [UIColor lightGrayColor];

3    lable.numberOfLines = 0;

4    [self.view addSubview:lable];

5

6    NSString * string = @"Always believe that something wonderful is about \nto happen!";

7

8    //富文本

9    NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];

10

11    //段落样式

12    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];

13

14 #warning  lable.numberOfLines必须为0,段落样式才生效

15    //行间距

16    paragraphStyle.lineSpacing = 10.0;

17    //段落间距

18    paragraphStyle.paragraphSpacing = 20.0;

19

20 //    paragraphStyle.baseWritingDirection = NSWritingDirectionLeftToRight;

21 //    paragraphStyle.firstLineHeadIndent = 10.0;

22 //    paragraphStyle.headIndent = 50.0;

23 //    paragraphStyle.tailIndent = 200.0;

24

25    [attributedString addAttribute:NSParagraphStyleAttributeName

26                              value:paragraphStyle

27                              range:NSMakeRange(0, string.length)];

28

29    lable.attributedText = attributedString;

你可能感兴趣的:(NSAttributedString用法)