2016-11-19 72 views
0

我想根据文本长度设置uilabel的宽度,然后在最上方设置宽度。文字可能会有所不同,所以我不能只是预先定义uilabel的宽度。我的方法是获取文本的宽度,然后再添加10.0,但不起作用。基于文本长度的目标c uilabel宽度

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]; 

任何意见是非常感谢。

+0

电解金属锰工作正常,你可能想与我们分享如何准确“这是行不通的”。一个问题:你有没有使用自动布局? –

+1

如果你的问题是添加填充,请看看这里:http://stackoverflow.com/questions/3476646/uilabel-text-margin 如果宽度计算不正确,我建议你使用自动布局,如果你不想,就像@RokJarc建议的那样,详细说明它是如何工作的。 – EDUsta

+0

是的,我使用自动布局,一切正常,但我不希望uilabel的宽度恰好适合,我希望它比文本稍宽。 – bubibu

回答

1

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

sizeToFit重新调整你的标签内,它根据它的当前textfont和您提供的numberOfLines目前frame.size

然后你可以改变大小

[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

+0

@bubibu如果你想要像HTML一样的填充标签,你需要将标签的文本对齐设置为'NSTextAlignmentCenter'; –