2012-01-05 49 views
4

我使用-[NSString sizeWithFont]來獲取文本高度。字符't'明顯高於'm',但-sizeWithFont爲這兩個字符串返回相同的高度。代碼如下:如何使用UIKit計算文本的確切高度?

UIFont* myFont = [UIFont fontWithName:@"Helvetica" size:1000.0]; 
NSString* myStr = @"m"; 
CGSize mySize = [myStr sizeWithFont:myFont]; 

如'm'所示,它返回{834, 1151}。用myStr = @"t"代替,它是{278, 1151}。較小的寬度按預期顯示,但不顯示高度。

是否有其他函數緊緊包裹文本?我理想的是尋找相當於Android的Paint.getTextBounds()的東西。

+0

'sizeWithFont'返回該字體的任何字符的最高可能大小。這聽起來像你真正想要做的是獲得原始字形並獲得每個角色的高度。 – 2012-01-05 23:16:59

回答

1

嗯......我假設你只會和個別角色一起工作。如上所述,sizeWithFont返回該字體的最大字符的高度,因爲無論您做什麼,文本字段都將成爲該高度。你將能夠獲得最大的高度值(UIFont的CGFloat capHeight),但它看起來像你將要使用各種文本

我會看看CoreText框架。開始here並閱讀。不可避免地,你將會遇到以下幾點:

CGFloat GetLineHeightForFont(CTFontRef iFont) 
{ 
    CGFloat lineHeight = 0.0; 

    check(iFont != NULL); 
    lineHeight += CTFontGetLeading(iFont); 
    return lineHeight; 
} 
3

您從這種方法中獲得的信息基本上是字體的行高(即上升加上您選擇的字體的下降)。它不是基於單個字符,而是基於特定的字體指標。您可以從UIFont類中獲取有關字體指標的大部分信息(例如,方法-ascender可爲您提供字體上升的高度)。大多數情況下,您將處理繪製字形時所需的垂直空間總量以及該字體的高度上限和最低下降量。沒有辦法從UIFont獲取有關單個字形的信息。如果你需要這些信息,你必須看看CoreText框架,它可以讓你在繪製和排列字形方面有更多的靈活性,但是使用起來要複雜得多。

有關在您的應用中處理文本的更多信息,請參閱Text, Web, and Editing Programming GuideDrawing and Managing Text部分。對於大多數需要處理UIKit或CoreText路徑的框架和類,這也是一個很好的啓動點。