基于文本长度的目标c uilabel宽度

时间:2016-11-19 16:59:27

标签: objective-c uilabel

我想根据文本长度设置uilabel的宽度,然后在其上面使它更宽一些。文字可能不同,所以我不能只预定uilabel的宽度。我的方法是获取文本的宽度,然后再添加10.0,但它不起作用。

CGSize tSize = [[self.label1 text] sizeWithAttributes:@{NSFontAttributeName:[self.label1 font]}];
CGFloat tWidth = tSize.width + 10.0;
self.label1.frame = CGRectMake(self.label1.frame.origin.x, self.label1.frame.origin.y, tWidth, self.label1.frame.size.height);
self.label1.backgroundColor = [UIColor blueColor];

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您可能希望使用[yourLabel sizeToFit];[yourLabel sizeThatFits: <#your target size#>];

sizeToFit根据当前frame.sizetextfont您的标签在其当前numberOfLines内调整其大小提供。

然后你可以改变尺寸

[yourLabel sizeToFit];
CGRect rect = yourLabel.frame;
rect.size.width += 10;
yourLabel.frame = rect;

sizeThatFits:(CGSize)size不会调整标签大小,但会返回适合您作为参数传递的大小的大小。 sizeToFit在内部使用sizeThatFits:(CGSize)size

您可以通过执行此操作来更改尺寸

CGSize exampleSize = (CGSize){300, 300};
CGSize fittingSize = [yourLabel sizeThatFits: exampleSize];
CGRect rect = yourLabel.frame;
rect.size.width = fittingSize.width;
rect.size.height = fittingSize.height;
yourLabel.frame = rect;

即使您正在使用yourLabel.attributedText

,这应该可以正常工作