我现在有一个UILabel,UILabel.text值会定期更改。
我遇到的问题是,如果UILabel.text值每次更改,UILabel宽度都会根据标签的内容而变化。
我该如何解决这个问题?这是我现在的代码:
outputLabel.text = errorMessage;
outputLabel.hidden = NO;
[outputLabel sizeToFit];
更新 我使用sizeToFit的原因是因为我需要自动更改高度。
谢谢,
彼得
答案 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。
它基本上只是用原始宽度覆盖新宽度,因此它不会改变宽度,而是动态地改变高度。