如何防止sizeToFit更改UILabel宽度?

时间:2013-10-27 23:20:07

标签: ios objective-c width uilabel

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

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

我该如何解决这个问题?这是我现在的代码:

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

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

谢谢,

彼得

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

[UILabel sizeThatFits:]CGSize一起使用,其(320, 10000)具有无限高度。

答案 2 :(得分:2)

我将UILabel子类化并覆盖sizeThatFits方法,如下所示:

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

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

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

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