iOS NSAttributedStr

100作者 劉棟 2015.12.17 16:13*
寫了11505字,被45人關注,獲得了66個喜歡

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

字數2471 閱讀990 評論0 
[iOS_NSAttributedString 的21種屬性詳細介紹(圖文混排)](http://blog.csdn.net/sponge_cmz/article/details/49794691)
 * API: Character Attributes , NSAttributedString 共有21個屬性*
* 1. NSFontAttributeName ->設置字體屬性,默認值:字體:Helvetica(Neue) 字號:12  
* 2. NSParagraphStyleAttributeName ->設置文本段落排版格式,取值爲 NSParagraphStyle 對象(詳情見下面的API說明) 
* 3. NSForegroundColorAttributeName ->設置字體顏色,取值爲 UIColor對象,默認值爲黑色 
* 4. NSBackgroundColorAttributeName ->設置字體所在區域背景顏色,取值爲 UIColor對象,默認值爲nil, 透明色 
* 5. NSLigatureAttributeName ->設置連體屬性,取值爲NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符
* 6. NSKernAttributeName ->設置字符間距,取值爲 NSNumber 對象(整數),正值間距加寬,負值間距變窄 
* 7. NSStrikethroughStyleAttributeName ->設置刪除線,取值爲 NSNumber 對象(整數) 
* 8. NSStrikethroughColorAttributeName ->設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色 
* 9. NSUnderlineStyleAttributeName ->設置下劃線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似 
* 10. NSUnderlineColorAttributeName ->設置下劃線顏色,取值爲 UIColor 對象,默認值爲黑色 
* 11. NSStrokeWidthAttributeName ->設置筆畫寬度(粗細),取值爲 NSNumber 對象(整數),負值填充效果,正值中空效果 
* 12. NSStrokeColorAttributeName ->填充部分顏色,不是字體顏色,取值爲 UIColor 對象 
* 13. NSShadowAttributeName ->設置陰影屬性,取值爲 NSShadow 對象 
* 14. NSTextEffectAttributeName ->設置文本特殊效果,取值爲 NSString 對象,目前只有圖版印刷效果可用 
* 15. NSBaselineOffsetAttributeName ->設置基線偏移值,取值爲 NSNumberfloat),正值上偏,負值下偏 
* 16. NSObliquenessAttributeName ->設置字形傾斜度,取值爲 NSNumberfloat),正值右傾,負值左傾 
* 17. NSExpansionAttributeName ->設置文本橫向拉伸屬性,取值爲 NSNumberfloat),正值橫向拉伸文本,負值橫向壓縮文本 
* 18. NSWritingDirectionAttributeName ->設置文字書寫方向,從左向右書寫或者從右向左書寫 
* 19. NSVerticalGlyphFormAttributeName ->設置文字排版方向,取值爲 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本
* 20. NSLinkAttributeName ->設置鏈接屬性,點擊後調用瀏覽器打開指定URL地址 
* 21. NSAttachmentAttributeName ->設置文本附件,取值爲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管理一個字符串,以及與該字符串中的單個字符或某些範圍的字符串相關的屬性。它有一個子類NSMutableAttributedString
     * 具體實現時,NSAttributedString維護了一個NSString,用來保存最原始的字符串,另有一個NSDictionary用來保存各個子串/字符的屬性。
     */

titleLabel.png
#pragma mark - NSMutableAttributedString 創建
    /* 三種初始化方法,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 設置字體屬性
    /* 字體大小 及 字體類型 */
    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 設置文本段落排版格式
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
    style.firstLineHeadIndent = 20;
    style.lineSpacing = 10;

    [mAttStri addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, mAttStri.length / 2)];

設置文本段落排版格式.png
#pragma mark ** 3. NSForegroundColorAttributeName 設置字體顏色
    /* 值爲UIColor,字體顏色,默認爲黑色. */
    [mAttStri addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, mAttStri.length)];

設置字體顏色.png
#pragma mark ** 4. NSBackgroundColorAttributeName 設置字體所在區域背景顏色
    /* 值爲UIColor,字體背景色,默認透明. */
    [mAttStri addAttribute:NSBackgroundColorAttributeName value:[UIColor grayColor] range:NSMakeRange(0, 20)];

設置字體所在區域背景顏色.png
#pragma mark ** 5. NSLigatureAttributeName 設置連體屬性
    /* 取值爲NSNumber 對象(整數). 0 表示沒有連體字符, 1 表示使用默認的連體字符. 一般中文用不到,在英文中可能出現相鄰字母連筆的情況 */
    [mAttStri addAttribute:NSLigatureAttributeName value:@0 range:NSMakeRange(0, mAttStri.length)];
#pragma mark ** 6. NSKernAttributeName 設置字符間距
    /* 值爲浮點數NSNumber,字距屬性,默認值爲0。*/
    [mAttStri addAttribute:NSKernAttributeName value:@3 range:NSMakeRange(0, mAttStri.length)];

設置字符間距.png
#pragma mark ** 7. NSStrikethroughStyleAttributeName 設置刪除線
    /* 值爲整型NSNumber,可取值爲(取值大小爲刪除線的寬度)
        enum {

        NSUnderlineStyleNone = 0×00,

        NSUnderlineStyleSingle = 0×01,

        }; 設置刪除線。
    */
    [mAttStri addAttribute:NSStrikethroughStyleAttributeName value:@3 range:NSMakeRange(3, 7)];

設置刪除線.png
#pragma mark ** 8. NSStrikethroughColorAttributeName 設置刪除線顏色
    /* 這個屬性的值是一個UIColor對象. */
    [mAttStri addAttribute:NSStrikethroughColorAttributeName value:[UIColor blueColor] range:NSMakeRange(3, 3)];

設置刪除線顏色.png
#pragma mark ** 9. NSUnderlineStyleAttributeName 設置下劃線
    /* 取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似 */
    [mAttStri addAttribute:NSUnderlineStyleAttributeName value:@2 range:NSMakeRange(6, 5)];

設置下劃線.png
#pragma mark ** 10. NSUnderlineColorAttributeName 設置下劃線顏色
    /* 這個屬性的值是一個UIColor對象.默認值爲nil. */
    [mAttStri addAttribute:NSUnderlineColorAttributeName value:[UIColor blackColor] range:NSMakeRange(6, 5)];

設置下劃線顏色.png
#pragma mark ** 11. NSStrokeWidthAttributeName 設置筆畫寬度(粗細)
    /* 值爲浮點數NSNumber。設置筆畫的粗細。負值填充效果,正值中空效果. */
    [mAttStri addAttribute:NSStrokeWidthAttributeName value:@10 range:NSMakeRange(50, 30)];

設置筆畫寬度(粗細).png
#pragma mark ** 12. NSStrokeColorAttributeName 填充部分顏色,
    /* 不是字體顏色,取值爲 UIColor 對象 默認值爲nil,設置的屬性同ForegroundColor。*/
    [mAttStri addAttribute:NSStrokeColorAttributeName value:[UIColor orangeColor] range:NSMakeRange(50, 20)];

填充部分顏色.png
#pragma mark ** 13. NSShadowAttributeName 設置陰影屬性

    /* 值爲NSShadow,設置筆畫的陰影,默認值爲nil。*/
    NSShadow *shadow = [[NSShadow alloc]init];
    shadow.shadowOffset = CGSizeMake(10, 10);
    shadow.shadowColor = [UIColor greenColor];
    [mAttStri addAttribute:NSShadowAttributeName value:shadow range:NSMakeRange(20, 10)];

設置陰影屬性.png
#pragma mark ** 14. NSTextEffectAttributeName 設置文本特殊效果
    /* 這個屬性的值是一個NSString對象。使用此屬性指定的文字效果,如NSTextEffectLetterpressStyle。此屬性的默認值爲nil,表示沒有文本效應。*/
    [mAttStri addAttribute:NSTextEffectAttributeName value:NSTextEffectLetterpressStyle range:NSMakeRange(80, 10)];

設置文本特殊效果.png
#pragma mark ** 15. NSBaselineOffsetAttributeName 設置基線偏移值
    /* 此屬性的值是包含一個浮點值的NSNumber對象,表示的字符從基線偏移的NSNumber對象,默認值是0。正值上偏,負值下偏 */
    [mAttStri addAttribute:NSBaselineOffsetAttributeName value:@5 range:NSMakeRange(112, 10)];

設置基線偏移值.png
#pragma mark ** 16. NSObliquenessAttributeName 設置字形傾斜度取值爲 NSNumber (float),正值右傾,負值左傾
    /* 此屬性的值是包含一個浮點值的NSNumber對象。默認值爲0,表示沒有傾斜, 正值右傾,負值左傾。 */
    [mAttStri addAttribute:NSObliquenessAttributeName value:@0.8 range:NSMakeRange(135, 15)];

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

設置文本橫向拉伸屬性png
#pragma mark ** 18. NSWritingDirectionAttributeName 設置文字書寫方向
    /** 
     * 取值爲包含NSNumber對象的數組. 從左向右書寫或者從右向左書寫.
     *
     * 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];

設置文字書寫方向.png
#pragma mark ** 19. NSVerticalGlyphFormAttributeName 設置文字排版方向
    /**
     * 值爲整型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)];

設置文字排版方向.png
#pragma mark ** 20. NSLinkAttributeName 設置鏈接屬性
    /**
     * 此屬性的值是NSURL對象(首選)或一個NSString對象。此屬性的默認值爲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;

    /* 簽訂協議, 指定代理人之後. 但點擊鏈接時, 會回調協議方法 (- textView:shouldInteractWithURL:inRange:) */
    textView.delegate = self;

    textView.attributedText = attStr;

設置鏈接屬性.png
#pragma mark ** 21. NSAttachmentAttributeName 設置文本附件
    /* 這個屬性的值是一個NSTextAttachment對象。此屬性的默認值爲nil,表示無附件。*/

    /**
     * 關於NSTextAttachment類的簡單說明
     *
     * NSTextAttachment 類有一個指定的初始化方法(- initWithData:ofType:), 需要指定附件文檔的數據和附件文件的類型. 如果附件文檔數據指定nil, 那麼系統將會默認指定爲image對象作爲值. 因此, 也可以通過這個特性實現圖文混排.
     * 下面就以附件爲image對象來說明NSAttachmentAttributeName的使用.
     *
     */

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 550, 320, 60)];
    label.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:label];


    /* 下面實現在百度兩個漢字之間插入一個照片 */
    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;
}
 原文地址:http://www.jianshu.com/p/6665c088bd01

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章