iOS7.0以后的UILabel会自动将Text行尾的空白字符全部去除,除了常见的半角空格(\0x20)和制表符(\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 @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
