我现在有一个 UILabel 并且 UILabel.text 值会定期更改。
我遇到的问题是,如果每次 UILabel.text 值发生变化,则 UILabel 宽度会根据标签的内容而变化。
我怎样才能解决这个问题?这是我现在拥有的代码:
outputLabel.text = errorMessage;
outputLabel.hidden = NO;
[outputLabel sizeToFit];
更新 我使用 sizeToFit 的原因是因为我需要自动改变高度。
谢谢,
彼得
我现在有一个 UILabel 并且 UILabel.text 值会定期更改。
我遇到的问题是,如果每次 UILabel.text 值发生变化,则 UILabel 宽度会根据标签的内容而变化。
我怎样才能解决这个问题?这是我现在拥有的代码:
outputLabel.text = errorMessage;
outputLabel.hidden = NO;
[outputLabel sizeToFit];
更新 我使用 sizeToFit 的原因是因为我需要自动改变高度。
谢谢,
彼得
您可以创建 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
我继承了 UILabel 并覆盖了 sizeThatFits 方法,如下所示:
- (CGSize)sizeThatFits:(CGSize)size
{
CGSize res = [super sizeThatFits:size];
return CGSizeMake(size.width, res.height);
}
然后,如果我将标签添加到笔尖,我会从对象库中放置一个 UILabel。之后,我确保将放置标签的类设置为我的自定义类,而不是默认的 UILabel。
它基本上只是用原始宽度覆盖新宽度,因此它永远不会改变宽度,而是动态改变高度。
[UILabel sizeThatFits:]与CGSize具有无限高度的 a 一起使用,例如(320, 10000).
使用以下技巧完成工作:
首先是 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 并通过设置框架设置其宽度。