[iOS]UILabel取消自动Trim空格和换行等空白字符

    xiaoxiao2026-03-14  8

    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

    转载请注明原文地址: https://ju.6miu.com/read-1307959.html
    最新回复(0)