UILabel输入文档字按空格自动换行行怎么解决

iOS6.0版本以前:
label.text = @"
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordW
CGSize resize = [label sizeThatFits:CGSizeMake(label.frame.size.width, MAXFLOAT)];
label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, size.height);
这种方法在iOS5,6都有效,在iOS6以后被desperate
- iOS6.0版本以上
需要用到以下方法:返回文本占据的矩形区域
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_***AILABLE_IOS(6_0);
size:需要绘制的矩形大小
NSStringDrawingTruncatesLastVisibleLine = 1 && 5,
NSStringDrawingUsesLineFragmentOrigin = 1 && 0,
NSStringDrawingUsesFontLeading = 1 && 1,
NSStringDrawingUsesDeviceMetrics = 1 && 3,
typedef NSInteger NSStringDrawingO
NSStringDrawingTruncatesLastVisibleLine:
如果文本内容比指定的尺寸要大,哪个最后可见的那行,会被截断,并且添加省略号。如果没有同时设置NSStringDrawingUsesLineFragmentOrigin那么这个选项的设置会被忽略。
(Truncate and add an ellipsis character to the last visible line if the text does not fit into the specified bounds. This option is ignored if the NSStringDrawingUsesLineFragmentOrigin option is not also specified.)
NSStringDrawingUsesLineFragmentOrigin:默认绘制String的设置是“the line fragment origin”(自动换行),而不是一行的显示的。
(The origin specified when drawing the string is the line fragment origin and not the baseline origin.)
NSStringDrawingUsesFontLeading:运用字体大小来计算行高
(Use the font leading information to calculate line heights.)
NSStringDrawingUsesDeviceMetrics:使用图像字形边界(而不是排版的界限)计算布局。(Use the image glyph bounds (instead of the typographic bounds) when computing layout.)
attributes:应用于String的一些属性,对于NSAttributedString这些属性同样适用,但是对于NSString而言这些设置的属性是对于整个字符串的,而不是某个范围的。
context:context上下文。包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil 。
最近项目中用到的代码
#import "UILabel+Common.h"
@implementation UILabel (Common)
- (void)setLongString:(NSString *)str withFitWidth:(CGFloat)width {
[self setLongString:str withFitWidth:width withMaxHeight:MAXFLOAT];
- (void)setLongString:(NSString *)str withFitWidth:(CGFloat)width withMaxHeight:(CGFloat)maxHeight {
self.numberOfLines = 0;
CGSize size = CGSizeMake(width, MAXFLOAT);
CGRect textRect = [str boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName : self.font}
context:nil];
CGRect rect = self.frame;
rect.size.height = textRect.size.height;
self.frame =
self.text =
本文已收录于以下专栏:
相关文章推荐
第一种方法:直接设置label的属性: label.lineBreakMode = NSLineBreakByWordW
这种方法适用于文字比较少,而label的大小比较大到可以容纳...
既可以自动换行,又可以根据字符串的长度来调整字体的大小。
_label = [ [ UILabel alloc ] initWithFrame: CGRectMake( 20 , 280 ...
UILabel *tips = [[UILabel alloc]initWithFrame:CGRectMake(20, 16, kWidth - 20, 45)];
[tips setTex...
NSString *str = @&我是一asdf我是一我是一我是一我是一我是一我是一我是一我是一我是一我是一我是一asdf我是一asdf我是一asdf我是一asdf我是一asdf我是一asdf&; ...
//初始化label
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)];
//设置自动行数与字符换行...
NSString *str = @&你要放在label里的文本字符串
CGSize size = [str sizeWithFont:[UIFont systemFontOfSi...
1、 在里面输入换行符
2、设置lable根据内容自动换行(iOS7.0 以前)
3、设置lable根据内容自动换行(iOS7.0 以后)
4、自己写了一个稍微省事一点的方法
UILabel 的常见属性和方法:
//创建UIlabel对象
UILabel* label = [[UILabel alloc] initWithFrame:self...
UILabel *label = [[UILabel
alloc]initWithFrame:CGRectMake(20,
450, 320 -
    [label...
刚刚在UILabel的文字的自动换行,我要打到的目的是使文字显示在一定的区域内,保持两行,多余放不下的字用点代替。通常设置UILabel自动适应高度并自动换行的代码如下:
CGRect frame =...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)[iOS]UILabel取消自动Trim空格和换行等空白字符
我的图书馆
[iOS]UILabel取消自动Trim空格和换行等空白字符
iOS7.0以后的UILabel会自动将Text行尾的空白字符全部去除,除了常见的半角空格(\0×20)和制表符(\t)之外,全角空格(\u3000)也被计算在内,甚至连多余的换行符(\r,\n)也被自动去除了。这一点虽然方便直接将控件赋值和无需取值后再trim,但是太过智能化了之后,往往不能满足一些本可以简单实现的需求。
需求1.使用添加\n方式将上下文本连续空两行,即实现文本的2倍行距。
iOS7.0之前解决办法:在每个换行符后面添加一个空格
即如果要显示为:
使用以下格式进行文本赋值
lbl.text = @"aaaaaaa\n\u0020\n\u0020bbbbbb";
iOS7.0之后需要增加,不增加则无效
lbl.numberOfLines = 0; // 0表示行数不固定
lbl.lineBreakMode=UILineBreakModeWordW // 允许换行(可选)
需求2.在所有的UILabel的text后增加一个空格,并使text右对齐。
iOS7.0之前解决办法:直接在text后增加空格即可,即text在赋值前增加空格。
lbl.text = [ stringWithFormat:@"%@%@","aaaaa","\u0020"];
iOS7.0之后需要重写UILabel的drawTextInRect方法,通过缩短默认文本绘制Rect的宽度半个字体宽度来实现。
具体实现代码如下:
文件名:MyLabel.h
#import &UIKit/UIKit.h&
@interface MyLabel : UILabel
文件名:MyLabel.m
#import "MyLabel.h"
@implementation MyLabel
-(id) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
-(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)];
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
如果您喜欢本文,请分享到:& & &
TA的最新馆藏
喜欢该文的人也喜欢

参考资料

 

随机推荐