iOS 文字樣式處理總結(jié)(字體绪氛、前背景色、斜體涝影、加粗枣察、對(duì)齊、行間距、段間距序目、動(dòng)態(tài)獲取字符串label寬高等

iOS 文字樣式處理總結(jié)(字體臂痕、前背景色、斜體宛琅、加粗刻蟹、對(duì)齊、行間距嘿辟、段間距舆瘪、動(dòng)態(tài)獲取字符串label寬高等)

在iOS開(kāi)發(fā)中,常常會(huì)有一段文字顯示不同的顏色和字體红伦,或者給某幾個(gè)文字加刪除線或下劃線的需求英古。NSMuttableAttstring(帶屬性的字符串),可以靈活實(shí)現(xiàn)以上功能昙读。
NSMutableParagraphStyle段落風(fēng)格召调,設(shè)置行間距、段間距蛮浑、縮進(jìn)唠叛、對(duì)齊方式等。

1. 實(shí)例化方法和使用方法

實(shí)例化方法:

使用字符串初始化
- (id)initWithString:(NSString *)str;
//例:
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"文字樣式處理"];
字典中存放一些屬性名和屬性值:
- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;
//如:
NSDictionary *attributeDict = [NSDictionarydictionaryWithObjectsAndKeys:
                                [UIFontsystemFontOfSize:15.0],NSFontAttributeName,
                                [UIColorredColor],NSForegroundColorAttributeName,
                               NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"文字樣式處理" attributes:attributeDict];
使用NSAttributedString初始化沮稚,跟NSMutableString艺沼,NSString類(lèi)似:
- (id)initWithAttributedString:(NSAttributedString *)attester;

使用方法:

為某一范圍內(nèi)文字設(shè)置多個(gè)屬性
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;
為某一范圍內(nèi)文字添加某個(gè)屬性
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
為某一范圍內(nèi)文字添加多個(gè)屬性
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
移除某范圍內(nèi)的某個(gè)屬性
- (void)removeAttribute:(NSString *)name range:(NSRange)range;

2. 常見(jiàn)的屬性及說(shuō)明

NSFontAttributeName //字體
NSParagraphStyleAttributeName //段落格式
NSForegroundColorAttributeName //字體顏色
NSBackgroundColorAttributeName //背景顏色
NSStrikethroughStyleAttributeName //刪除線格式

NSUnderlineStyleAttributeName //下劃線格式
NSStrokeColorAttributeName //刪除線顏色
NSStrokeWidthAttributeName //刪除線寬度

NSShadowAttributeName //陰影


NSParagraphStyleAttributeName

段落的風(fēng)格(設(shè)置首行,行間距蕴掏,對(duì)齊方式什么的)

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];  
paragraphStyle.lineSpacing = 10;// 字體的行間距  
paragraphStyle.firstLineHeadIndent = 20.0f;//首行縮進(jìn)  
paragraphStyle.alignment = NSTextAlignmentJustified;//(兩端對(duì)齊的)文本對(duì)齊方式:(左障般,中,右盛杰,兩端對(duì)齊挽荡,自然)  
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;//結(jié)尾部分的內(nèi)容以……方式省略 ( "...wxyz" ,"abcd..." ,"ab...yz")  
paragraphStyle.headIndent = 20;//整體縮進(jìn)(首行除外)  
paragraphStyle.tailIndent = 20;//  
paragraphStyle.minimumLineHeight = 10;//最低行高  
paragraphStyle.maximumLineHeight = 20;//最大行高  
paragraphStyle.paragraphSpacing = 15;//段與段之間的間距  
paragraphStyle.paragraphSpacingBefore = 22.0f;//段首行空白空間/* Distance between the bottom of the previous paragraph (or the end of its paragraphSpacing, if any) and the top of this paragraph. */  
paragraphStyle.baseWritingDirection = NSWritingDirectionLeftToRight;//從左到右的書(shū)寫(xiě)方向(一共三種)  
paragraphStyle.lineHeightMultiple = 15;/* Natural line height is multiplied by this factor (if positive) before being constrained by minimum and maximum line height. */  
paragraphStyle.hyphenationFactor = 1;//連字屬性 在iOS,唯一支持的值分別為0和1  
兩個(gè)樣式枚舉
typedef NS_ENUM(NSInteger, NSLineBreakMode) {/* What to do with long lines */  
    NSLineBreakByWordWrapping = 0,     /* Wrap at word boundaries, default */  
    NSLineBreakByCharWrapping,/* Wrap at character boundaries */  
    NSLineBreakByClipping,/* Simply clip */剪掉后面顯示不了的部分  
    NSLineBreakByTruncatingHead,/* Truncate at head of line: "...wxyz" */頭部分的內(nèi)容以……方式省略  
    NSLineBreakByTruncatingTail,/* Truncate at tail of line: "abcd..." */結(jié)尾部分的內(nèi)容以……方式省略  
    NSLineBreakByTruncatingMiddle/* Truncate middle of line:  "ab...yz" */中間部分的內(nèi)容以……方式省略  
} NS_ENUM_AVAILABLE_IOS(6_0);  
  
 
typedef NS_ENUM(NSInteger, NSWritingDirection) {  
    NSWritingDirectionNatural       = -1,    // Determines direction using the Unicode Bidi Algorithm rules P2 and P3  
    NSWritingDirectionLeftToRight   =  0,    // Left to right writing direction 左到右的書(shū)寫(xiě)方向  
    NSWritingDirectionRightToLeft   =  1    // Right to left writing direction 右到左的書(shū)寫(xiě)方向  
} NS_ENUM_AVAILABLE_IOS(6_0);  
/* 
     NSFontAttributeName 字體大小 
     NSParagraphStyleAttributeName 段落的風(fēng)格(設(shè)置首行即供,行間距定拟,對(duì)齊方式什么的) 
     NSKernAttributeName 字間距 
     */  
    NSDictionary *attributes = @{  
                                 NSFontAttributeName:[UIFont systemFontOfSize:15],  
                                 NSParagraphStyleAttributeName:paragraphStyle,  
                                 NSKernAttributeName:@(10),  
                                                                
                                 };  
    textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];  

再來(lái)個(gè)實(shí)例


    //隨便定義一個(gè)字符串,做測(cè)試使用
    NSString *massageStr = @"\t北京烏托邦有限公司(以下簡(jiǎn)稱(chēng)“烏托邦”)在此特別提醒您(用戶)在注冊(cè)成為用戶之前逗嫡,請(qǐng)認(rèn)真閱讀本《用戶協(xié)議》(以下簡(jiǎn)稱(chēng)“協(xié)議”)办素,確保您充分理解本協(xié)議中各條款。請(qǐng)您審慎閱讀并選擇接受或不接受本協(xié)議祸穷。除非您接受本協(xié)議所有條款,否則您無(wú)權(quán)注冊(cè)勺三、登錄或使用本協(xié)議所涉服務(wù)雷滚。您的注冊(cè)、登錄吗坚、使用等行為將視為對(duì)本協(xié)議的接受祈远,并同意接受本協(xié)議各項(xiàng)條款的約束呆万。\r\n \t本協(xié)議約定烏托邦與用戶之間關(guān)于“烏托邦”軟件服務(wù)(以下簡(jiǎn)稱(chēng)“服務(wù)”)的權(quán)利義務(wù)〕捣荩“用戶”是指注冊(cè)谋减、登錄、使用本服務(wù)的個(gè)人扫沼。本協(xié)議可由烏托邦隨時(shí)更新出爹,更新后的協(xié)議條款一旦公布即代替原來(lái)的協(xié)議條款,恕不再另行通知缎除,用戶可在本網(wǎng)站查閱最新版協(xié)議條款严就。在烏托邦修改協(xié)議條款后,如果用戶不接受修改后的條款器罐,請(qǐng)立即停止使用烏托邦提供的服務(wù)梢为,用戶繼續(xù)使用烏托邦提供的服務(wù)將被視為接受修改后的協(xié)議。";
    
    
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:massageStr];
    
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
   
   [paragraphStyle setLineSpacing:20];//調(diào)整行間距
   
   [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.agreementText length])];
   
   [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 12)]; // 0為起始位置 length是從起始位置開(kāi)始 設(shè)置指定顏色的長(zhǎng)度
   
   [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(18, 3)];
   
   //設(shè)置尺寸
   [attributedString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:20] range:NSMakeRange(18, 3)]; // 0為起始位置 length是從起始位置開(kāi)始 設(shè)置指定字體尺寸的長(zhǎng)度

根據(jù)字符串獲取寬高

根據(jù)寬度求高度 content 計(jì)算的內(nèi)容 width 計(jì)算的寬度 font字體大小

+ (CGFloat)getHeightWithContent:(NSString *)content width:(CGFloat)width font:(CGFloat)font{
     
    CGRect rect = [content boundingRectWithSize:CGSizeMake(width, 999)
                                                           options:NSStringDrawingUsesLineFragmentOrigin
                                                        attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:font]}
                                                           context:nil];
    return rect.size.height;
}
根據(jù)高度度求寬度 content 計(jì)算的內(nèi)容 Height 計(jì)算的高度 font字體大小

+ (CGFloat)getWidthWithContent:(NSString *)content height:(CGFloat)height font:(CGFloat)font{
     
    CGRect rect = [content boundingRectWithSize:CGSizeMake(999, height)
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                     attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:font]}
                                        context:nil];
    return rect.size.width;
}

辛苦總結(jié)轰坊,轉(zhuǎn)載請(qǐng)注明出處铸董,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肴沫,一起剝皮案震驚了整個(gè)濱河市粟害,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌樊零,老刑警劉巖我磁,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驻襟,居然都是意外死亡夺艰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)沉衣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)郁副,“玉大人,你說(shuō)我怎么就攤上這事豌习〈婊眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵肥隆,是天一觀的道長(zhǎng)既荚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)栋艳,這世上最難降的妖魔是什么恰聘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上晴叨,老公的妹妹穿的比我還像新娘凿宾。我一直安慰自己,他們只是感情好兼蕊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布初厚。 她就那樣靜靜地躺著,像睡著了一般孙技。 火紅的嫁衣襯著肌膚如雪产禾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天绪杏,我揣著相機(jī)與錄音下愈,去河邊找鬼。 笑死蕾久,一個(gè)胖子當(dāng)著我的面吹牛势似,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僧著,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼履因,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盹愚?” 一聲冷哼從身側(cè)響起栅迄,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎皆怕,沒(méi)想到半個(gè)月后毅舆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愈腾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年憋活,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱黄。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悦即,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橱乱,到底是詐尸還是另有隱情辜梳,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布泳叠,位于F島的核電站作瞄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏危纫。R本人自食惡果不足惜宗挥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一节预、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧属韧,春花似錦、人聲如沸蛤吓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)会傲。三九已至锅棕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淌山,已是汗流浹背裸燎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泼疑,地道東北人德绿。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像退渗,于是被迫代替她去往敵國(guó)和親移稳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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