2014-01-26 1 views
0

이것은 다소 간단한 질문입니다. 나는을 150px의 최대 높이에 속하는 텍스트로 자르고 그 텍스트의 끝 부분에 "계속 읽기"를 추가하려고합니다. 그래서 다음과 같이 말합니다.줄 x에서 NSString을 자르는 방법은 무엇입니까?

a 
b 
c 
d 
e 
f 
g 
h 
i 
j 
k 
l 
m 

그리고 우리는 (13), 말의 글꼴이는 ... 우리는 전체 텍스트 높이를 계산하고 13px 글꼴에 두 개 이상의 150 픽셀 높이의 것을 알 수 있습니다. 내 질문은, 그 150px를 초과 문자열의 부분을 어떻게 잘라야합니까?

+1

답변을 참조하십시오. http://stackoverflow.com/questions/15113461/decrease-the-width-of-the-last-line-in-multiline-uilabel – InsertWittyName

답변

0

당신은

보관할 문자열 while (size.height<150.0f)에 한 줄을 추가 (더 나은 boundingRectWithSize:options:attributes:context:을 사용 iOS7에에)

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(NSLineBreakMode)lineBreakMode 

를 사용할 수 있습니다.

편집 :이 예제는 일할 수 : (참고 :! 당신은 ARC를 사용하지 않는 경우, trimmedStr는 오토 릴리즈한다)

- (NSString*) stringByTrimmingString:(NSString*)str forSize:(CGSize)maxSize withFont:(UIFont*)font 
{ 
    NSMutableString* trimmedStr = [NSMutableString new]; 
    for (NSString* line in [str componentsSeparatedByString:@"\n"]) { 

     NSString *testStr = [trimmedStr stringByAppendingFormat:@"%@\n",line]; 

     CGSize sz = [testStr sizeWithFont:font forWidth:maxSize.width lineBreakMode:NSLineBreakByWordWrapping]; 
     if (sz.height > maxSize.height) { 
       return [trimmedStr copy]; 
     } 
     [trimmedStr appendFormat:@"%@\n",line]; 
    } 
    return [trimmedStr copy]; 
} 
0

정말 오히려 바보 같은 (무력)을 할이 성취를 얻을 수 있습니다 내 앱에서. 수동으로 UILabel에 줄 바꿈 문자와 들여 쓰기를 만듭니다. 이렇게하려면 텍스트의 첫 번째 공백을 찾고 (첫 번째 단어의 끝을 얻으려면) 내 경계를 벗어나는 지 확인하십시오. 그렇지 않으면 두 번째 공간으로 이동하여 확인하십시오.

좀 더 지능적인 것을하기 위해 나는 당신의 문자열을 절반으로 나눈 다음 그 절반이 범위를 초과하는지보십시오. 그런 다음 1/4로 이동하고 그렇지 않으면 3/4로 이동하여 확인하십시오. 그런 다음 한도를 초과하는 문자를 찾으면 공간에 대한 역방향 검색을 수행하고 (맞는 마지막 단어를 찾습니다) 문자열을 잘라냅니다. 이것은 어려운 코드처럼 보일지 모르지만, 이진 탐색 algorythm과 같지만 문자열을 통해서입니다. 이 계정에 모든 \ n 개의 문자를 받아 정확한 CGSize를 계산하기 때문에

0

당신은 단순히

-(CGSize)sizeWithFont:(UIFont*)font forWidth:(CGFloat)width lineBreakMode:(NSLineBreakMode)lineBreakMode; 

를 사용할 수 있습니다.

관련 문제