UILabel 文本被截断

Posted

技术标签:

【中文标题】UILabel 文本被截断【英文标题】:UILabel text gets cut off 【发布时间】:2012-11-26 07:22:07 【问题描述】:

我正在尝试动态设置标签大小。它以一种奇怪的方式工作,我截断了一些文本。 我首先设置我的标签文本,然后尝试像这样调整它的大小。

    _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(MAXFOAT,self.view.bounds.size.width-30); 试试这个-maxSize.width = label.frame.size.width; Rahul,确实有效,写下这个作为答案,我会接受。如果可以的话 - 你能解释一下,为什么是宽度?我的高度计算错误,而不是宽度,所以我有点不清楚。 你的宽度没问题。为 maxSize.height 传递一个大数字。返回的高度将是需要的。 由于某种原因,它并不好。传递大数字也无济于事。我再重复一遍,我通过更改 maxSize.width = label.frame.size.width 让它正常工作。用大量文本检查,标签大小调整为魅力。 【参考方案1】:

我已经改变了你的方法...请检查它..它可能会帮助你..

- (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);

【讨论】:

【参考方案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;


使用这个代码块,可能对你有帮助。

【讨论】:

为什么要使用lines: 方法呢?只需将numberOfLines设置为0即可。只要设置了标签的高度,它就会正常显示。 hmmm,你是 ri8,我编辑了我的答案。谢谢你的建议。 工作答案也是如此。感谢您的时间!不过之前有正确的答案,所以我会更早地接受。【参考方案3】:

为什么要以编程方式调整标签大小?这是您在 IB 或使用 autorezizeMask 时无法做到的事情吗?

【讨论】:

【参考方案4】:

标签的约束大小未按您的预期计算,目前,您的代码将标签高度限制为视图边界的高度。将您的 maxSize 实例更改为:

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

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

【讨论】:

对不起,按照你的方式尝试过,但是这样它根本不会调整大小。请看 Rahul 的评论,这样我就可以正常工作了。 @Datenshi 抱歉,向第二个参数发送了错误的值。编辑以包含正确的代码。 这些值是向后的。 CGSizeMake 接受宽度,高度,而不是高度,宽度。 @Datenshi,rmaddy 是正确的,应该这样做。我混淆了参数。

以上是关于UILabel 文本被截断的主要内容,如果未能解决你的问题,请参考以下文章

UiLabel 文本从顶部被截断

如何检查 UILabel 是不是被截断?

如何找出截断的 UILabel 文本的宽度

UILabel 文本截断与文本中的换行符

UILabel - 缩小文本而不是截断尾部

在字符串的 5 个字符之前截断 UILabel 文本