6

我现在有一个 UILabel 并且 UILabel.text 值会定期更改。

我遇到的问题是,如果每次 UILabel.text 值发生变化,则 UILabel 宽度会根据标签的内容而变化。

我怎样才能解决这个问题?这是我现在拥有的代码:

outputLabel.text = errorMessage;
outputLabel.hidden = NO;
[outputLabel sizeToFit];

更新 我使用 sizeToFit 的原因是因为我需要自动改变高度。

谢谢,

彼得

4

4 回答 4

7

您可以创建 UILabel 的类别或子类并添加此方法以根据输入文本仅调整标签的高度

- (void)heightToFit {

    CGSize maxSize = CGSizeMake(self.frame.size.width, CGFLOAT_MAX);
    CGSize textSize = [self.text sizeWithFont:self.font constrainedToSize:maxSize lineBreakMode:self.lineBreakMode];

    CGRect labelRect = self.frame;
    labelRect.size.height = textSize.height;
    [self setFrame:labelRect];
}

并使用它来代替 sizeToFit

于 2013-10-27T23:36:27.457 回答
2

我继承了 UILabel 并覆盖了 sizeThatFits 方法,如下所示:

- (CGSize)sizeThatFits:(CGSize)size
{
    CGSize res = [super sizeThatFits:size];

    return CGSizeMake(size.width, res.height);
}

然后,如果我将标签添加到笔尖,我会从对象库中放置一个 UILabel。之后,我确保将放置标签的类设置为我的自定义类,而不是默认的 UILabel。

它基本上只是用原始宽度覆盖新宽度,因此它永远不会改变宽度,而是动态改变高度。

于 2014-08-29T21:12:32.310 回答
2

[UILabel sizeThatFits:]CGSize具有无限高度的 a 一起使用,例如(320, 10000).

于 2013-10-27T23:55:18.320 回答
0

使用以下技巧完成工作:

首先是 uiLabel 的设置标签。我的 cell.yourLable 标签是 998

cell.yourLable.numberOfLines = 0;
[cell.yourLable sizeToFit];

UILabel *myLbl=[cell.contentView viewWithTag:998];
CGRect frm=cell.yourLable.frame;
frm.size.width = cell.contentView.frame.size.width;
myLbl.frame=frm;

这里的诀窍是通过标签获取相同的 UiLabel 并通过设置框架设置其宽度。

于 2016-04-11T09:43:59.947 回答