UILabel文本被截断

4

我想动态设置标签的大小。它的表现很奇怪,一些文本被截断了。 我首先设置了标签文本,然后尝试按如下方式调整其大小。

    _switch2Label.text = @"Call on alarm, there will be no call if other user of alarm system will recieve an alarm call and confirm (answer) it by pressing 0#";
    _switch2Label.numberOfLines = 0;
    [self newFrame:_switch2Label];

- (void) newFrame:(UILabel *) label
{

    CGSize maxSize = self.view.bounds.size;
    maxSize.width = maxSize.width - 30;
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];

    CGRect newFrame = label.frame;
    newFrame.size.height = labelSize.height;
    label.frame = newFrame;

}

我只得到了三行文本,然而这个标签需要五行。也许有人能看出我的错误?如果我添加更多文本到标签中,就能显示了,但是依然会有两行标签文本被裁剪掉。

尝试将 maxSize 更改为 MAXFLOAT,maxSize = CGSizeMake(MAXFLOAT,self.view.bounds.size.width-30); - zt9788
3
请尝试这个:maxSize.width = label.frame.size.width; (该语句为Objective-C代码,意为将变量maxSize的宽度设置为label控件的宽度大小。) - Rahul Wakade
Rahul,那个确实起作用了,请将其写成答案,我会接受它。如果您可以的话,能否解释一下为什么是width?我的高度计算有误,而不是宽度,所以对我来说有点不清楚。 - Datenshi
你的宽度很好。在maxSize.height参数中传递一个较大的数字,返回的高度将是所需的高度。 - rmaddy
由于某种原因,它并不好。即使传递大数字也没有帮助。我要重复一遍,通过更改maxSize.width = label.frame.size.width,我成功地使其正常工作。检查了大量文本,标签的大小调整得非常好。 - Datenshi
4个回答

2
 _switch2Label.text = @"Call on alarm, there will be no call if other user of alarm system will recieve an alarm call and confirm (answer) it by pressing 0#,";
 _switch2Label.numberOfLines = 0;
 [self newFrame:_switch2Label];



- (void) newFrame:(UILabel *) label
{

    CGSize maximumSize = CGSizeMake(label.frame.size.width, 10000);
    //maxSize.width = maxSize.width - 30;
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap];

    CGRect newFrame = label.frame;
    newFrame.size.height = labelSize.height;
    label.frame = newFrame;

}

使用这些代码块可能会对您有所帮助。


1
为什么要使用 lines: 方法呢?只需将 numberOfLines 设置为 0 即可。只要标签的高度设置正确,它就会正确显示。 - rmaddy
嗯,你是对的,我编辑了我的答案,谢谢建议。 - Nookaraju
之前确实有正确的答案,所以我会接受之前的答案。谢谢您的时间! - Datenshi

2

我已经修改了你的方法...请检查一下..它可能会对你有所帮助。

- (void) newFrame:(UILabel *) label
{
     CGSize constraint = CGSizeMake(300, 1000.0f);
     CGSize size_txt_overview1 = [label.text sizeWithFont:[UIFont fontWithName:@"Arial Rounded MT Bold" size:15] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
     label.frame = CGRectMake(20,20, size_txt_overview1.width, size_txt_overview1.height+15);
}

0

标签的约束大小没有按照您的意图进行计算,目前,您的代码将标签高度限制为视图边界的高度。将您的maxSize实例更改为:

CGSize maxSize = CGSizeMake(self.view.bounds.size.width - 30, MAXFLOAT);
CGSize labelSize = ...

这样做将确保约束不受视图边界的限制。如果您希望标签能够超出视图边界,您还可以考虑设置视图的 clipsToBounds 属性。


抱歉,我按照你的方式尝试了,但是这种方式根本没有调整大小。请看看Rahul的评论,我用他的方法使其正常工作了。 - Datenshi
@Datenshi 抱歉,我将错误的值发送到了第二个参数。已编辑以包含正确的代码。 - nmock
数值是颠倒的。CGSizeMake需要宽度,高度,而不是高度,宽度。 - rmaddy
@Datenshi,rmaddy是正确的,那应该可以了。我混淆了参数。 - nmock

0
为什么要通过编程方式调整标签的大小?这是无法在IB或使用autorezizeMask完成的吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接