• UILabel取消自动Trim空格和换行等空白字符


    原文:http://www.tuicool.com/articles/AzmaMj

     iOS7.0以后的UILabel会自动将Text行尾的空白字符全部去除,除了常见的半角空格(×20)和制表符( )之外,全角空格(u3000)也被计算在内,甚至连多余的换行符( , )也被自动去除了。这一点虽然方便直接将控件赋值和无需取值后再trim,但是太过智能化了之后,往往不能满足一些本可以简单实现的需求。


    需求1.使用添加 方式将上下文本连续空两行,即实现文本的2倍行距。  
    iOS7.0之前解决办法:在每个换行符后面添加一个空格  
    即如果要显示为: 

    aaaaaaa
    空行
    空行
    bbbbbb

    使用以下格式进行文本赋值

    lbl.text = @"aaaaaaa
    u0020
    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

  • 相关阅读:
    (1)spark核心RDD的概念解析、创建、以及相关操作
    docker常用命令
    asyncpg:异步操作PostgreSQL
    python调用golang编写的动态链接库
    使用C语言为python编写动态模块(3)--在C中实现python中的类
    使用C语言为python编写动态模块(2)--解析python中的对象如何在C语言中传递并返回
    flask的orm操作
    python下载指定的版本包
    flask 的管理模块的功能add_template_global、send_from_directory
    docker 的简单使用
  • 原文地址:https://www.cnblogs.com/NINIiOS/p/4422537.html
Copyright © 2020-2023  润新知