繁体   English   中英

UILabel影响边界大小的行数

[英]UILabel number of lines affecting the bounds size

我对UILabel有这种特殊的行为。 任何numberOfLines可以正常工作,除了1.如果我将行数设置为1,它将忽略我后面设置的宽度。 我不明白为什么1行将它搞砸了......

这是我的代码

 UILabel *label = [[UILabel alloc] init]; label.backgroundColor = [UIColor greenColor]; label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill"; label.frame = CGRectMake(20, 20, 100, 0); CGRect rect = label.frame; label.numberOfLines = 2; label.lineBreakMode = NSLineBreakByTruncatingTail; [self.view addSubview:label]; rect.size.width = 100; label.frame = rect; [label sizeToFit]; 

使用此代码:

UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill";
label.frame = CGRectMake(20, 20, 100, 0);
label.numberOfLines = 3;
label.lineBreakMode = NSLineBreakByTruncatingTail;
[self.view addSubview:label];

[label sizeToFit];

CGRect rect = label.frame;
rect.size.width = 100;
label.frame = rect;


numberOfLines = 3

此搜索

numberOfLines = 1

图像2

如果你想在这种情况下使用numberOfLines = 1,你的文本将在一行中。所以请使用numberOfLines = 0 ;

label.numberOfLines = 0;

并且无需再次定义标签框架,因此请删除这些声明。

CGRect rect = label.frame;
rect.size.width = 100;
label.frame = rect;

使用此代码这是完美的..

UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill";
label.frame = CGRectMake(20, 20, 100, 0);
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByTruncatingTail;
[self.view addSubview:label];

[label sizeToFit];

是的,当numberOfLines = 1时,它不起作用

我必须在最后添加这一行,使其适用于所有情况..

label.width = min(label.width,100)

用它作为:

UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill";

label.numberOfLines = 0;

CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(100 , 9999) lineBreakMode:label.lineBreakMode];
float lHeight = labelSize.height;
label.frame = CGRectMake(20, 20, 100, lHeight);

label.lineBreakMode = NSLineBreakByTruncatingTail;
[self.view addSubview:label];

编辑: - (void)sizeToFit

说明:

调整接收器视图的大小并移动它,使其只包含其子视图。 如果要调整当前视图的大小以使其占用最合适的空间,请调用此方法。 具体的UIKit视图根据自己的内部需求调整自己的大小。 在某些情况下,如果视图没有超视图,则可能会将其自身调整为屏幕边界。 因此,如果您希望给定视图将其自身调整为其父视图,则应在调用此方法之前将其添加到父视图。

// [label sizeToFit]; 

希望它能帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM