簡單學習NSAttributedString和NSMutableAttributedString(一)

NSAttributedString是一種帶有屬性的字符串,通過該類我們可以靈活操作和呈現多種樣式的文字數據,常用語文字排版和圖文混排。

NSAttributedString和NSMutableAttributedString類似NSArray和NSMutableArray,NSAttributedString創建成功後的屬性是不可變的,而NSMutableAttributedString創建成功後的屬性是可變的。

NSAttributedString共有21個屬性:

1.NSFontAttributeName  // 設置字體屬性,默認是 Helvetica(Neue) 12

2.NSParagraphStyleAttributeName // 設置文本段落排版格式  默認是NSParagraphStyle對象([NSParagraphStyle defaultParagraphStyle]);

3.NSForegroundColorAttributeName // 設置文本顏色,默認是黑色

4.NSBackgroundColorAttributeName // 設置字體背景色,默認是沒有顏色

5.NSLigatureAttributeName //設置連體屬性,取值爲NSNumber ,默認是1,表示使用默認的連體字符,0是沒有連體字符

6.NSKernAttributeName //設置字符間距,取值爲NSNumber,正值間距加寬,負值間距變窄

7.NSStrikethroughStyleAttributeName //設置刪除線,取值爲NSNumber

8.NSUnderlineStyleAttributeName // 設置下劃線,取值爲NSNumber

9.NSStrokeColorAttributeName //設置筆畫顏色,取值是UIColor

10.NSStrokeWidthAttributeName //設置筆畫寬度(粗細),取值爲 NSNumber,負值填充效果,正值中空效果

11.NSShadowAttributeName //設置陰影屬性,取值爲 NSShadow

12.NSTextEffectAttributeName //設置文本特殊效果,取值爲 NSString

13.NSAttachmentAttributeName //設置文本附件,取值爲NSTextAttachment,常用於文字圖片混排

14.NSLinkAttributeName //設置鏈接屬性,點擊後調用瀏覽器打開指定URL地址

15.NSBaselineOffsetAttributeName //設置基線偏移值,取值爲 NSNumber (float),正值上偏,負值下偏

16.NSUnderlineColorAttributeName //設置下劃線顏色,取值爲 UIColor 對象,默認值爲黑色

17.NSStrikethroughColorAttributeName //設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色

18.NSObliquenessAttributeName //設置字形傾斜度,取值爲 NSNumber (float),正值右傾,負值左傾

19.NSExpansionAttributeName //設置文本橫向拉伸屬性,取值爲 NSNumber (float),正值橫向拉伸文本,負值橫向壓縮文

20.NSWritingDirectionAttributeName //設置文字書寫方向,從左向右書寫或者從右向左書寫 ,取值:LRE, RLE, LRO, and RLO,可見API

21.NSVerticalGlyphFormAttributeName //設置文字排版方向,取值爲 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本

//
//  ViewController.m
//  NSAttributedStringDemo
//
//  Created by york on 16/4/11.
//  Copyright © 2016年 裴楊威. All rights reserved.
//

#define DEVICE_HEIGHT [UIScreen mainScreen].bounds.size.height
#define DEVICE_WIDTH [UIScreen mainScreen].bounds.size.width
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong)UILabel *showLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *str = @"CSDNhttp://www.csdn.net(隸屬北京創新樂知信息技術有限公司)創立於1999年,是中國最大的IT社區和服務平臺,爲中國的軟件開發者和IT從業者提供知識傳播、職業發展、軟件開發等全生命週期服務,滿足他們在職業發展中學習及共享知識和信息、建立職業發展社交圈、通過軟件開發實現技術商業化等剛性需求。擁有超過3000萬註冊會員(其中活躍會員800萬)、50萬註冊企業及合作伙伴。";
    NSAttributedString *astr = [[NSAttributedString alloc] initWithString:str];
    
    NSMutableAttributedString *attributStr = [[NSMutableAttributedString alloc] initWithAttributedString:astr];
    //屬性1,設置字體屬性,示例:
    [attributStr addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"ArialRoundedMTBold" size:24.0f] range:NSMakeRange(0, 4)];
    //屬性2,設置文本段落排版格式,示例:
    //屬性3,設置文本顏色,示例:
    [attributStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(7, 14)];
    //屬性4,設置字體背景色,示例:
    [attributStr addAttribute:NSBackgroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(25, 4)];
    //屬性5,設置連體屬性,示例:*
    [attributStr addAttribute:NSLigatureAttributeName value:[NSNumber numberWithInt:1] range:NSMakeRange(attributStr.length-2, 2)];
    //屬性6,設置字符間距,示例:
    [attributStr addAttribute:NSKernAttributeName value:[NSNumber numberWithInt:10] range:NSMakeRange(0, 4)];
    //屬性7,設置刪除線,示例:
    [attributStr addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(147, 4)];
    //屬性8,設置下劃線,示例:
    [attributStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(157, 4)];
    //屬性9,設置筆畫顏色,示例:*
    [attributStr addAttribute:NSStrokeColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(80, 10)];
    //屬性10,設置筆畫寬度(粗細),示例:
    [attributStr addAttribute:NSStrokeWidthAttributeName value:[NSNumber numberWithInt:-5] range:NSMakeRange(100, 4)];
    //屬性11,設置陰影屬性,示例:
//    NSShadow 共有3個屬性:陰影顏色,模糊半徑和偏移
    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowOffset = CGSizeMake(3, 3);
    shadow.shadowBlurRadius = 0.5;
    shadow.shadowColor = [UIColor grayColor];  //陰影顏色
    [attributStr addAttribute:NSShadowAttributeName value:shadow range:NSMakeRange(110, 4)];
    //屬性12,設置文本特殊效果,示例:
    [attributStr addAttribute:NSTextEffectAttributeName value:NSTextEffectLetterpressStyle range:NSMakeRange(120, 4)];
    //屬性14,設置鏈接屬性,示例:
    [attributStr addAttribute:NSLinkAttributeName value:[NSURL URLWithString:[str substringWithRange:NSMakeRange(4, 19)]] range:NSMakeRange(4, 19)];
    //屬性15,設置基線偏移值,示例:
    [attributStr addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithInt:10] range:NSMakeRange(str.length-10, 10)];
    //屬性16,設置下劃線顏色,示例:
    [attributStr addAttribute:NSStrikethroughColorAttributeName value:[UIColor redColor] range:NSMakeRange(147, 4)];
    //屬性17,設置刪除線顏色,示例:
    [attributStr addAttribute:NSUnderlineColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(157, 4)];
    //屬性18,設置字形傾斜度,示例:
    [attributStr addAttribute:NSObliquenessAttributeName value:@0.5 range:NSMakeRange(133, 10)];
    //屬性19,設置文本橫向拉伸屬性,示例:
    [attributStr addAttribute:NSExpansionAttributeName value:@0.5 range:NSMakeRange(123, 10)];
    //屬性20,設置文字書寫方向,示例:
    [attributStr addAttribute:NSWritingDirectionAttributeName value:@[@(NSWritingDirectionLeftToRight)] range:NSMakeRange(str.length-10, 10)];
    //屬性21,設置文字排版方向,示例:
    [attributStr addAttribute:NSVerticalGlyphFormAttributeName value:@0 range:NSMakeRange(0, str.length)];
    self.showLabel.attributedText = attributStr;
    
}

- (UILabel *)showLabel
{
    if (!_showLabel) {
        _showLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, DEVICE_WIDTH, DEVICE_HEIGHT-200)];
        _showLabel.layer.borderWidth = 1;
        _showLabel.numberOfLines = 0;
        _showLabel.layer.borderColor = [UIColor grayColor].CGColor;
        _showLabel.userInteractionEnabled = YES;
        [self.view addSubview:_showLabel];
    }
    
    return _showLabel;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

如果需要的話,也可以通過NSDictionary來先設置需要的屬性,然後使用NSAttributedString的- (instancetype)initWithString:(NSString *)str attributes:(nullable NSDictionary<NSString *, id> *)attrs方法來設置。

發佈了39 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章