2016-11-19 73 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'; –