iOS_NSAttributedString 的21種屬性詳細(xì)介紹(圖文混排)

 * API: Character Attributes , NSAttributedString 共有21個屬性*
* 1. NSFontAttributeName ->設(shè)置字體屬性搀捷,默認(rèn)值:字體:Helvetica(Neue) 字號:12  
* 2. NSParagraphStyleAttributeName ->設(shè)置文本段落排版格式翼雀,取值為 NSParagraphStyle 對象(詳情見下面的API說明) 
* 3. NSForegroundColorAttributeName ->設(shè)置字體顏色帽哑,取值為 UIColor對象寇损,默認(rèn)值為黑色 
* 4. NSBackgroundColorAttributeName ->設(shè)置字體所在區(qū)域背景顏色座泳,取值為 UIColor對象羹呵,默認(rèn)值為nil, 透明色 
* 5. NSLigatureAttributeName ->設(shè)置連體屬性优构,取值為NSNumber 對象(整數(shù))琢融,0 表示沒有連體字符界牡,1 表示使用默認(rèn)的連體字符
* 6. NSKernAttributeName ->設(shè)置字符間距,取值為 NSNumber 對象(整數(shù))漾抬,正值間距加寬宿亡,負(fù)值間距變窄 
* 7. NSStrikethroughStyleAttributeName ->設(shè)置刪除線,取值為 NSNumber 對象(整數(shù)) 
* 8. NSStrikethroughColorAttributeName ->設(shè)置刪除線顏色纳令,取值為 UIColor 對象挽荠,默認(rèn)值為黑色 
* 9. NSUnderlineStyleAttributeName ->設(shè)置下劃線克胳,取值為 NSNumber 對象(整數(shù)),枚舉常量 NSUnderlineStyle中的值圈匆,與刪除線類似 
* 10. NSUnderlineColorAttributeName ->設(shè)置下劃線顏色漠另,取值為 UIColor 對象,默認(rèn)值為黑色 
* 11. NSStrokeWidthAttributeName ->設(shè)置筆畫寬度(粗細(xì))跃赚,取值為 NSNumber 對象(整數(shù))笆搓,負(fù)值填充效果,正值中空效果 
* 12. NSStrokeColorAttributeName ->填充部分顏色纬傲,不是字體顏色满败,取值為 UIColor 對象 
* 13. NSShadowAttributeName ->設(shè)置陰影屬性,取值為 NSShadow 對象 
* 14. NSTextEffectAttributeName ->設(shè)置文本特殊效果叹括,取值為 NSString 對象算墨,目前只有圖版印刷效果可用 
* 15. NSBaselineOffsetAttributeName ->設(shè)置基線偏移值,取值為 NSNumber (float),正值上偏领猾,負(fù)值下偏 
* 16. NSObliquenessAttributeName ->設(shè)置字形傾斜度米同,取值為 NSNumber (float),正值右傾,負(fù)值左傾 
* 17. NSExpansionAttributeName ->設(shè)置文本橫向拉伸屬性摔竿,取值為 NSNumber (float),正值橫向拉伸文本面粮,負(fù)值橫向壓縮文本 
* 18. NSWritingDirectionAttributeName ->設(shè)置文字書寫方向,從左向右書寫或者從右向左書寫 
* 19. NSVerticalGlyphFormAttributeName ->設(shè)置文字排版方向继低,取值為 NSNumber 對象(整數(shù))熬苍,0 表示橫排文本,1 表示豎排文本
* 20. NSLinkAttributeName ->設(shè)置鏈接屬性袁翁,點(diǎn)擊后調(diào)用瀏覽器打開指定URL地址 
* 21. NSAttachmentAttributeName ->設(shè)置文本附件,取值為NSTextAttachment對象,常用于文字圖片混排 

- (void)creatTitleLabel {
    
    self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 320, 400)];
    self.titleLabel.numberOfLines = 0;
    self.titleLabel.layer.borderColor = [UIColor grayColor].CGColor;
    self.titleLabel.layer.borderWidth = 0.5;
    self.titleLabel.textAlignment = NSTextAlignmentLeft;
    [self.view addSubview:self.titleLabel];
    
    NSString *string = @"An NSAttributedString object manages character strings and associated sets of attributes (for example, font and kerning) that apply to individual characters or ranges of characters in the string. An association of characters and their attributes is called an attributed string. ";
   
    /* 這句話就是對這個類的一個最簡明扼要的概括柴底。NSAttributedString管理一個字符串,以及與該字符串中的單個字符或某些范圍的字符串相關(guān)的屬性粱胜。它有一個子類NSMutableAttributedString
     * 具體實現(xiàn)時柄驻,NSAttributedString維護(hù)了一個NSString,用來保存最原始的字符串焙压,另有一個NSDictionary用來保存各個子串/字符的屬性鸿脓。
     */
titleLabel.png
#pragma mark - NSMutableAttributedString 創(chuàng)建
    /* 三種初始化方法,NSMutableAttributedString沒有初始化方法,使用父類初始化方法, 使用initWithString:, initWithString:attributes:, 或者 initWithAttributedString: */
    NSAttributedString *attStri = [[NSAttributedString alloc] initWithString:string attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:30]}];
    
    NSMutableAttributedString *mAttStri = [[NSMutableAttributedString alloc] initWithString:string];
    

#pragma mark ** 1. NSFontAttributeName 設(shè)置字體屬性
    /* 字體大小 及 字體類型 */
    NSRange font_range = [string rangeOfString:@"An"];
    [mAttStri addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30] range:font_range];
    [mAttStri addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Courier-BoldOblique" size:17.0] range:NSMakeRange(10, 10)];
字體大小 及 字體類型 .png
    
#pragma mark ** 2. NSParagraphStyleAttributeName 設(shè)置文本段落排版格式
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
    style.firstLineHeadIndent = 20;
    style.lineSpacing = 10;
    
    [mAttStri addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, mAttStri.length / 2)];
設(shè)置文本段落排版格式.png
#pragma mark ** 3. NSForegroundColorAttributeName 設(shè)置字體顏色
    /* 值為UIColor,字體顏色涯曲,默認(rèn)為黑色. */
    [mAttStri addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, mAttStri.length)];
設(shè)置字體顏色.png
    
#pragma mark ** 4. NSBackgroundColorAttributeName 設(shè)置字體所在區(qū)域背景顏色
    /* 值為UIColor野哭,字體背景色,默認(rèn)透明. */
    [mAttStri addAttribute:NSBackgroundColorAttributeName value:[UIColor grayColor] range:NSMakeRange(0, 20)];
設(shè)置字體所在區(qū)域背景顏色.png
    
#pragma mark ** 5. NSLigatureAttributeName 設(shè)置連體屬性
    /* 取值為NSNumber 對象(整數(shù)). 0 表示沒有連體字符, 1 表示使用默認(rèn)的連體字符. 一般中文用不到幻件,在英文中可能出現(xiàn)相鄰字母連筆的情況 */
    [mAttStri addAttribute:NSLigatureAttributeName value:@0 range:NSMakeRange(0, mAttStri.length)];
      
#pragma mark ** 6. NSKernAttributeName 設(shè)置字符間距
    /* 值為浮點(diǎn)數(shù)NSNumber拨黔,字距屬性,默認(rèn)值為0绰沥。*/
    [mAttStri addAttribute:NSKernAttributeName value:@3 range:NSMakeRange(0, mAttStri.length)];
設(shè)置字符間距.png
    
    
#pragma mark ** 7. NSStrikethroughStyleAttributeName 設(shè)置刪除線
    /* 值為整型NSNumber篱蝇,可取值為(取值大小為刪除線的寬度)
        enum {
        
        NSUnderlineStyleNone = 0×00,
     
        NSUnderlineStyleSingle = 0×01,
        
        }; 設(shè)置刪除線贺待。
    */
    [mAttStri addAttribute:NSStrikethroughStyleAttributeName value:@3 range:NSMakeRange(3, 7)];
設(shè)置刪除線.png
    
#pragma mark ** 8. NSStrikethroughColorAttributeName 設(shè)置刪除線顏色
    /* 這個屬性的值是一個UIColor對象. */
    [mAttStri addAttribute:NSStrikethroughColorAttributeName value:[UIColor blueColor] range:NSMakeRange(3, 3)];

設(shè)置刪除線顏色.png
    
#pragma mark ** 9. NSUnderlineStyleAttributeName 設(shè)置下劃線
    /* 取值為 NSNumber 對象(整數(shù)),枚舉常量 NSUnderlineStyle中的值态兴,與刪除線類似 */
    [mAttStri addAttribute:NSUnderlineStyleAttributeName value:@2 range:NSMakeRange(6, 5)];
設(shè)置下劃線.png
    
#pragma mark ** 10. NSUnderlineColorAttributeName 設(shè)置下劃線顏色
    /* 這個屬性的值是一個UIColor對象.默認(rèn)值為nil. */
    [mAttStri addAttribute:NSUnderlineColorAttributeName value:[UIColor blackColor] range:NSMakeRange(6, 5)];
設(shè)置下劃線顏色.png
    
    
#pragma mark ** 11. NSStrokeWidthAttributeName 設(shè)置筆畫寬度(粗細(xì))
    /* 值為浮點(diǎn)數(shù)NSNumber狠持。設(shè)置筆畫的粗細(xì)。負(fù)值填充效果瞻润,正值中空效果. */
    [mAttStri addAttribute:NSStrokeWidthAttributeName value:@10 range:NSMakeRange(50, 30)];
設(shè)置筆畫寬度(粗細(xì)).png
    
#pragma mark ** 12. NSStrokeColorAttributeName 填充部分顏色,
    /* 不是字體顏色甜刻,取值為 UIColor 對象 默認(rèn)值為nil绍撞,設(shè)置的屬性同F(xiàn)oregroundColor。*/
    [mAttStri addAttribute:NSStrokeColorAttributeName value:[UIColor orangeColor] range:NSMakeRange(50, 20)];
填充部分顏色.png
    
#pragma mark ** 13. NSShadowAttributeName 設(shè)置陰影屬性
    
    /* 值為NSShadow得院,設(shè)置筆畫的陰影傻铣,默認(rèn)值為nil。*/
    NSShadow *shadow = [[NSShadow alloc]init];
    shadow.shadowOffset = CGSizeMake(10, 10);
    shadow.shadowColor = [UIColor greenColor];
    [mAttStri addAttribute:NSShadowAttributeName value:shadow range:NSMakeRange(20, 10)];
設(shè)置陰影屬性.png
    
#pragma mark ** 14. NSTextEffectAttributeName 設(shè)置文本特殊效果
    /* 這個屬性的值是一個NSString對象祥绞。使用此屬性指定的文字效果非洲,如NSTextEffectLetterpressStyle。此屬性的默認(rèn)值為nil蜕径,表示沒有文本效應(yīng)两踏。*/
    [mAttStri addAttribute:NSTextEffectAttributeName value:NSTextEffectLetterpressStyle range:NSMakeRange(80, 10)];
設(shè)置文本特殊效果.png
    
    
#pragma mark ** 15. NSBaselineOffsetAttributeName 設(shè)置基線偏移值
    /* 此屬性的值是包含一個浮點(diǎn)值的NSNumber對象,表示的字符從基線偏移的NSNumber對象,默認(rèn)值是0兜喻。正值上偏梦染,負(fù)值下偏 */
    [mAttStri addAttribute:NSBaselineOffsetAttributeName value:@5 range:NSMakeRange(112, 10)];
設(shè)置基線偏移值.png
    
#pragma mark ** 16. NSObliquenessAttributeName 設(shè)置字形傾斜度取值為 NSNumber (float),正值右傾,負(fù)值左傾
    /* 此屬性的值是包含一個浮點(diǎn)值的NSNumber對象朴皆。默認(rèn)值為0帕识,表示沒有傾斜, 正值右傾,負(fù)值左傾遂铡。 */
    [mAttStri addAttribute:NSObliquenessAttributeName value:@0.8 range:NSMakeRange(135, 15)];
設(shè)置字形傾斜度取值.png

#pragma mark ** 17. NSExpansionAttributeName 設(shè)置文本橫向拉伸屬性
    /* 取值為 NSNumber(float), 正值橫向拉伸文本, 負(fù)值橫向壓縮文本 */
    NSRange range =  [string rangeOfString:@"An association of"];
    [mAttStri addAttribute:NSExpansionAttributeName value:@1.0 range:range];
設(shè)置文本橫向拉伸屬性png
    

#pragma mark ** 18. NSWritingDirectionAttributeName 設(shè)置文字書寫方向
    /** 
     * 取值為包含NSNumber對象的數(shù)組. 從左向右書寫或者從右向左書寫.
     *
     * The values of the NSNumber objects should be 0, 1, 2, or 3, for LRE, RLE, LRO, or RLO respectively, and combinations of NSWritingDirectionLeftToRight and NSWritingDirectionRightToLeft with NSTextWritingDirectionEmbedding or NSTextWritingDirectionOverride, as shown in Values of NSWritingDirectionAttributeName and equivalent markup.
     
     */
    NSRange rang2 = [string rangeOfString:@"characters and their"];
    [mAttStri addAttribute:NSWritingDirectionAttributeName value:@[@3] range:rang2];
設(shè)置文字書寫方向.png
    
    
#pragma mark ** 19. NSVerticalGlyphFormAttributeName 設(shè)置文字排版方向
    /**
     * 值為整型NSNumber肮疗,0為水平排版的字,1為垂直排版的字扒接。注意,在iOS中, 總是以橫向排版
     *
     * In iOS, horizontal text is always used and specifying a different value is undefined.
     */
    [mAttStri addAttribute:NSVerticalGlyphFormAttributeName value:@1 range:NSMakeRange(1, 10)];
設(shè)置文字排版方向.png
        
#pragma mark ** 20. NSLinkAttributeName 設(shè)置鏈接屬性
    /**
     * 此屬性的值是NSURL對象(首選)或一個NSString對象伪货。此屬性的默認(rèn)值為nil,表示沒有鏈接珠增。
     * UILabel無法使用該屬性, 可以使用UITextView 控件.
     */
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 450, 320, 60)];
    [self.view addSubview:textView];
    textView.backgroundColor  = [UIColor lightGrayColor];
    
    
    NSString *strLink = @"百度鏈接";
    NSAttributedString *attStr  = [[NSAttributedString alloc] initWithString:strLink attributes:@{NSLinkAttributeName: [NSURL URLWithString:@"http://www.baidu.com"]}];
    
    textView.editable = NO;
    
    /* 簽訂協(xié)議, 指定代理人之后. 但點(diǎn)擊鏈接時, 會回調(diào)協(xié)議方法 (- textView:shouldInteractWithURL:inRange:) */
    textView.delegate = self;
    
    textView.attributedText = attStr;
設(shè)置鏈接屬性.png
    
#pragma mark ** 21. NSAttachmentAttributeName 設(shè)置文本附件
    /* 這個屬性的值是一個NSTextAttachment對象超歌。此屬性的默認(rèn)值為nil,表示無附件蒂教。*/
    
    /**
     * 關(guān)于NSTextAttachment類的簡單說明
     *
     * NSTextAttachment 類有一個指定的初始化方法(- initWithData:ofType:), 需要指定附件文檔的數(shù)據(jù)和附件文件的類型. 如果附件文檔數(shù)據(jù)指定nil, 那么系統(tǒng)將會默認(rèn)指定為image對象作為值. 因此, 也可以通過這個特性實現(xiàn)圖文混排.
     * 下面就以附件為image對象來說明NSAttachmentAttributeName的使用.
     *
     */
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 550, 320, 60)];
    label.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:label];
    
    
    /* 下面實現(xiàn)在百度兩個漢字之間插入一個照片 */
    NSString *stiAtt = @"百度";
    
    NSTextAttachment *attach = [[NSTextAttachment alloc] initWithData:nil ofType:nil];
    attach.bounds = CGRectMake(0, 0, 50, 50);
    attach.image = [UIImage imageNamed:@"baidu.jpg"];
    
    NSAttributedString *strAtt = [NSAttributedString attributedStringWithAttachment:attach];
    
    NSMutableAttributedString *strMatt = [[NSMutableAttributedString alloc] initWithString:stiAtt];
    
    [strMatt insertAttributedString:strAtt atIndex:1];
    
    label.attributedText = strMatt;
    
    self.titleLabel.attributedText = mAttStri;
    [self.titleLabel sizeToFit];
    
}

#pragma mark - textView delegate 
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
    
    NSLog(@"%s", __func__);
    NSLog(@"url: %@", URL);
    return YES;
}
設(shè)置文本附件.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巍举,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凝垛,更是在濱河造成了極大的恐慌懊悯,老刑警劉巖蜓谋,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炭分,居然都是意外死亡桃焕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門捧毛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來观堂,“玉大人,你說我怎么就攤上這事呀忧∈郏” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵而账,是天一觀的道長胰坟。 經(jīng)常有香客問我,道長泞辐,這世上最難降的妖魔是什么笔横? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮咐吼,結(jié)果婚禮上吹缔,老公的妹妹穿的比我還像新娘。我一直安慰自己汽烦,他們只是感情好涛菠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撇吞,像睡著了一般俗冻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牍颈,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天迄薄,我揣著相機(jī)與錄音,去河邊找鬼煮岁。 笑死讥蔽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的画机。 我是一名探鬼主播冶伞,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼步氏!你這毒婦竟也來了响禽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芋类,沒想到半個月后隆嗅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侯繁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年胖喳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贮竟。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丽焊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咕别,到底是詐尸還是另有隱情粹懒,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布顷级,位于F島的核電站,受9級特大地震影響确垫,放射性物質(zhì)發(fā)生泄漏弓颈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一删掀、第九天 我趴在偏房一處隱蔽的房頂上張望翔冀。 院中可真熱鬧,春花似錦披泪、人聲如沸纤子。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽控硼。三九已至,卻和暖如春艾少,著一層夾襖步出監(jiān)牢的瞬間卡乾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工缚够, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幔妨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓谍椅,卻偏偏與公主長得像误堡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雏吭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容