2012-04-19 76 views
3

我有一個UILabel,如果我強制框架高度足夠高,就可以正確包裝單詞。但是,我希望它動態地找到適當的高度,並且sizeWithFont方法沒有這樣做;該方法只是創建我的標籤一行:CGSize sizeWithFont沒有返回正確的高度

CGSize subtitleSize=[subtitle sizeWithFont:subtitleFont forWidth:maxwidth lineBreakMode:UILineBreakModeWordWrap]; 

然後我用這個函數相同的文字,字體和大小:

 UILabel *subLabel=[[[UILabel alloc] initWithFrame:CGRectMake(0, 0, maxwidth, subtitleSize.height)]autorelease]; 
     subLabel.font=subtitleFont; 
     subLabel.text=subtitle; 
     subLabel.numberOfLines=0; 
     subLabel.lineBreakMode=UILineBreakModeWordWrap; 

它看起來像它應該所有的工作,並給我一個大小,然後我使用。但尺寸的高度始終只是標籤的一條線。

+0

我知道這是一個老問題,但我也試圖使用sizeWithFont:forWidth:lineBreakMode:最初。我認爲,因爲它只問寬度,它會使用最大浮動高度。但是,文檔中明確指出:「如果要在一行中使用指定的字體和行屬性進行渲染,則返回字符串的大小。」單線部分是訣竅。您必須使用指定constrainedToSize的大小方法之一。 – 2013-09-18 13:35:36

+1

@MattBecker你是一個學者,也是一個紳士。 – johnbakers 2013-09-18 14:02:11

回答

7

你可以使用這個

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode; 

最大規模的constrainedToSize

CGSize size = CGSizeMake(maxwidth, CGFLOAT_MAX); 
+0

但我並沒有把它限制在一個高度;那就是要點*,*最大的尺寸 – johnbakers 2012-04-19 08:34:04

+1

高度,然後適合 – adali 2012-04-19 08:35:11

+1

雖然看起來是黑客,但這似乎是一個合適的方法。 [Apple的'forWidth'版本文檔](https://developer.apple.com/library/ios/#documentation/UIKit/Reference/NSString_UIKit_Additions/Reference/Reference.html#//apple_ref/doc/uid/TP40006893- CH3-SW7)建議它只返回給定字體的近似'寬x線高度'的東西,不管字符串。 – patridge 2013-01-14 17:40:07

1

首先,檢查我在字幕變量fthe文本是隻要你的期望。然後嘗試用這種方法來計算字體大小:

CGSize subtitleSize = [subtitle sizeWithFont:subtitleFont constrainedToSize:CGSizeMake(maxwidth, 1000000) lineBreakMode:UILineBreakModeWordWrap]; 

在這段代碼中你計算文本大小到最大寬度和「無限」的高度。

希望它有幫助。

1

您可以手動提供一個更大的字體,這對我很有用。