2010-11-04 208 views

回答

106

這裏假設你已經設置字體:

label.text = @"some text"; 
[label sizeToFit]; 

您還需要定義一個最大寬度,並告訴你的程序如果sizeToFit給你的寬度大於最大值,該怎麼做。

+3

sizeToFit方法是UIView的一種方法。 – TopChul 2011-08-16 04:03:44

+53

如何定義最大寬度? – 2012-08-07 13:44:42

+0

+1這個答案幫了我最大的忙。 – 2012-10-23 06:17:38

7

我在這裏看到三個選項。

首先,讓標籤的尺寸足夠大以容納任何文字。這很簡單,但並不總是很好 - 取決於其周圍的景觀。

二,標籤可以調整較長文本的字體大小(adjustsFontSizeToFitWidth屬性)。這通常是不可取的,元素中的不同字體可能看起來很醜。

最後一個選項是根據當前保存的文本以編程方式調整標籤的大小。爲了計算與當前字體使用像這樣保存文本所需的大小:

CGSize textSize = [[someLabel text] sizeWithFont:[someLabel font] forWidth:someLabel.bounds.size.width lineBreakMode:UILineBreakModeWordWrap]; 
+0

如果我們使用UILineBreakModeWordWrap我們可以進入上的UILabel多行,我怎麼可以設置兩條線之間的空行。 – 2012-07-04 09:40:58

21

下面是如何做到這一點,假設以下messageLabel是您想要達到預期效果的標籤。現在,嘗試代碼的這些簡單的行:

// Set width constraint for label; it's actually the width of your UILabel 
    CGFloat constrainedWidth = 240.0f; 
    // Calculate space for the specified string 
    CGSize sizeOfText = [yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)]; 
    messageLabel.text = yourText; 
    messageLabel.numberOfLines = 0;// This will make the label multiline 
+7

這實際上是一個很好的答案......只是不是針對這個特定的問題!如果您想在維持固定寬度的同時自動調整「UILabel」的*高度*,此答案將很有效。事實上,當我看到這個頁面時,我正在尋找這個東西。我很樂意爲您的答案投票...但它不回答問題。不過,好的解決方案,可能會幫助其他人絆倒這個頁面。 – 2012-04-23 15:23:52

+1

謝謝jon!其實我也在尋找這個解決方案,順便說一句,我設法做到了,然後認爲我應該在這裏分享它。 :)順便說一句,那個時候發生的事情是,我沒有很好地注意到這個問題,所以犯了錯誤,我想。對不起,很高興它幫助你:D – 2012-04-23 16:53:47

+0

嗯,它幫助我投票。 – 2012-10-25 11:26:26

12
NSString *[email protected]"I am here."; 
CGSize stringsize1 = [txt1 sizeWithFont:[UIFont systemFontOfSize:14]]; 
[label setFrame:CGRectMake(x,y,stringsize1.width,hieght)]; 
[label setText:txt1]; 
1

關注這個。

CGSize stringsize = [yourString sizeWithFont:[UIFont systemFontOfSize:fontSize]]; 
[label setFrame:CGRectMake(x,y,stringsize.width,height)]; 
[label setText: yourString]; 
+0

此方法已棄用 – 2016-05-19 14:54:08

2

如果設置的字體和大小已經,如果你有你的框架定義,請嘗試使用這兩種常見情況如下:

if (label.text.length > maxCharPerLine) [label setNumberOfLines:0]; // infinite lines 
else [label setNumberOfLines:1]; // one line only 

// Adjust your font size to fit your desired width. 
[label setAdjustsFontSizeToFitWidth:YES]; 
+0

假設您嘗試多行標籤,那麼是的這是正確的方法。用於將課程設置的行數單行標記爲1。 – 2017-03-07 18:19:37

1

由於sizeWithFont在IOS 7.0,那麼你是貶值下面的代碼

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 



if (SYSTEM_VERSION_LESS_THAN(@"7.0")) { 
     // code here for iOS 5.0,6.0 and so on 
     CGSize fontSize = [itemCat_text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12]]; 
    } else { 
     // code here for iOS 7.0 
     fontSize = [itemCat_text sizeWithAttributes: 
          @{NSFontAttributeName: 
           [UIFont fontWithName:@"Helvetica" size:12]}]; 
    } 
1

使用自動佈局:

enter image description here

在視圖控制器:

override func viewDidLoad() { 
     super.viewDidLoad() 

self.sampleLabel.text = "Electrical Maintenance and Repair" 
      self.sampleLabel..sizeToFit() 

} 
相關問題