2011-08-02 4 views
3

주어진 공간에 NSString을 얼마만큼 렌더링 할 수 있는지 판단 할 수있는 방법이 있습니까?NSString 그리기/크기 방법으로 그려지는 하위 문자열을 결정하십시오.

모든 NSString sizeWithFont 메소드에 대해 알고 있습니다 (예 : sizeWithFont : constrainedToSize : lineBreakMode :). 문자열이 너무 길어서 들어갈 수없는 경우 문자열의 어떤 부분을 렌더링 할 수 있는지 알려주지 않습니다. 예를 들어

, 내가

NSString *testString = @"The brown dog"; 

이 내가 호출하는 경우 :

[testString sizeWithFont:[UIFont systemFontOfSize:17] constrainedtoSize:CGSizeMake(20, 20) lineBreakMode:UILineBreakModeWordWrap]; 

나는 CGSize = {20, 20}를 다시받을 수 있습니다. 그것은 문자열이 최소한 전체 크기를 가졌다는 것을 알려주지 만, 그것이 끝났는 지 혹은 얼마나 많이 들어갈 수 있었는지는 알려주지 않습니다. "브라운"만이 잘 맞았다면, 나는 그것을 알고 싶다.

어쩌면이를 수행 할 수있는 몇 가지 핵심 기반 방법이 있을까요?

답변

1

자를 것인지 확인하는 한 가지 방법은 제한 구석에 매우 큰 높이를 제공하는 것입니다. 다시 돌아 오는 높이가 레이블의 높이보다 높으면자를 수 있습니다. 이런 식으로 뭔가 :이 잘립니다 경우 당신을 말할 것이다,하지만 어떻게 그 많은 것 당신에게 말할 것이다

// myLabel is a UILabel* 
    CGSize labelSize = myLabel.frame.size; 
    labelSize.height = 9999; 
    CGSize newSize = [newLabel sizeWithFont:[UIFont systemFontOfSize:17.0] 
          constrainedToSize:labelSize 
           lineBreakMode:UILineBreakModeWordWrap]; 
    if(newSize.height > labelSize.height) { 
     // Whoops, too big! 
    } 

. 내가 생각할 수있는 유일한 방법은 반복 할 때마다 끝까지 단어를 제거하는 것입니다.

+0

죄송합니다. 당신이 말한 것의 첫 번째 부분은 내가했던 것에는 적절하지 않지만, 반복적 인 제안은 우리가 궁극적으로 한 일에 가깝습니다. 기본적으로, 우리는 방대한 크기로 시작했고, 바이너리 검색을 더 많거나 적게 수행하여 가장 긴 문자열을 찾았습니다. – DougW

관련 문제