標籤:
原文:http://www.tuicool.com/articles/AzmaMj
iOS7.0以後的UILabel會自動將Text行尾的空白字元全部去除,除了常見的半形空格(\0×20)和定位字元(\t)之外,全形空格(\u3000)也被計算在內,甚至連多餘的分行符號(\r,\n)也被自動去除了。這一點雖然方便直接將控制項賦值和無需取值後再trim,但是太過智能化了之後,往往不能滿足一些本可以簡單實現的需求。
需求1.使用添加\n方式將上下文本連續空兩行,即實現文本的2倍行距。
iOS7.0之前解決辦法:在每個分行符號後面添加一個空格
即如果要顯示為:
aaaaaaa空行空行bbbbbb
使用以下格式進行文本賦值
|
lbl.text = @"aaaaaaa\n\u0020\n\u0020bbbbbb"; |
iOS7.0之後需要增加,不增加則無效
|
lbl.numberOfLines = 0; // 0表示行數不固定 lbl.lineBreakMode=UILineBreakModeWordWrap; // 允許換行(可選) |
需求2.在所有的UILabel的text後增加一個空格,並使text靠右對齊。
iOS7.0之前解決辦法:直接在text後增加空格即可,即text在賦值前增加空格。
|
lbl.text = [NSString stringWithFormat:@"%@%@","aaaaa","\u0020"]; |
iOS7.0之後需要重寫UILabel的drawTextInRect方法,通過縮短預設文本繪製Rect的寬度半個字型寬度來實現。
具體實現代碼如下:
檔案名稱:MyLabel.h
|
#import <UIKit/UIKit.h> @interface MyLabel : UILabel @end |
檔案名稱:MyLabel.m
|
#import "MyLabel.h" @implementation MyLabel -(id) initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if(self){ return self; } } -(void) drawTextInRect:(CGRect)rect { //從將文本的繪製Rect寬度縮短半個字型寬度 //self.font.pointSize / 2 return [super drawTextInRect:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width - self.font.pointSize / 2, rect.size.height)]; } @end |
附錄:
UILabel會自動清除的空白字元(UNICODE)
\u0009 CHARACTER TABULATION
\u000A LINE FEED
\u000D CARRIAGE RETURN
\u0020 SPACE
\u0085 NEXT LINE
\u00A0 NBSP
\u1680 OGHAM SPACE MARK
\u180E MONGOLIAN VOWEL SEPARATOR
\u2000 EN QUAD
\u200A HAIR SPACE
\u200B ZERO WIDTH SPACE
\u2028 LINE SEPARATOR
\u2029 PARAGRAPH SEPARATOR
\u202F NARROW NO-BREAK SPACE
\u205F MEDIUM MATHEMATICAL SPACE
\u3000 IDEOGRAPHIC SPACE
UILabel取消自動Trim空格和換行等空白字元