2012-01-05 4 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}입니다. 작은 너비가 예상대로 나타나지만 높이는 표시되지 않습니다.

다른 기능이 텍스트를 단단히 감싸고 있습니까? 나는 이상적으로 안드로이드의 Paint.getTextBounds()와 같은 것을 찾고있다.

+0

'sizeWithFont'는 해당 글꼴의 모든 문자에 대해 가능한 가장 큰 크기를 반환합니다. 당신이 정말로하고 싶은 것은 원시 글립 문자를 얻고 각 문자의 높이를 얻는 것입니다. –

답변

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 경로를 처리해야하는 대부분의 프레임 워크 및 클래스에 대한 좋은 시작 지점입니다.

관련 문제