2012-05-10 2 views
2

사용자 정의 UIView 클래스가 있고 - (void)drawRect:(CGRect)rect에 텍스트를 그려야합니다. 그러나 텍스트 블록이 시스템 글꼴 크기가 12 일 때 최대 너비가 84px로 제한되기를 원합니다. 텍스트가이 너비를 초과하면 잘라내어 마지막 세 문자를 "..."로 만들고 싶습니다.주어진 글꼴 및 사각형의 문자열 길이 가져 오기

예 :

"This is some text" // length okay 
"Information co..." // length truncated 

내가 NSString- (CGSize)sizeWithFont:(UIFont *)font을 통해 주어진 글꼴로 문자열의 폭을 계산할 수 있다는 것을 알고 있지만, 어떻게 내가 84px 폭의 최대 문자열 길이를받을 수 있나요? 내가 제대로 상황을 이해하고있는 경우

+1

문제에 대한 신뢰할 수있는 단서가 많은 iOS에서 고정 폭 글꼴 (있는 경우)가없는 것입니다 - (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode

그것. 그래서 너는 아마 6 'X'문자들과 같은 너비로 10 'i'문자들을 말하게하자. –

+1

[이 블로그] (http://joshjustice.wordpress.com/2010/12/20/monospace-fonts-on- ios /)는 심지어 monospaced 글꼴이 iOS에서 실제로는 모노 스페이스가 아니라고 말합니다. : - 사용하고자하는 모든 문자열에 대해 sizeWithFont :를 사용하는 것이 더 낫습니다. –

+0

방법이 있어야합니다. 'UILabel'은 그것을하고 있습니다. 올바른 길이의 바이너리 검색을 할 수 있었고 길이가 맞을 때까지 루프를 다시 시도했지만 나에게보기 흉한 것처럼 보였습니다 ... – user826955

답변

4

, 당신은 방법을
- (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode를 사용하여 줄 바꿈 모드 UILineBreakModeTailTruncation를 사용해야합니다.

+0

그것은 매우 믿을 수 없을만큼 쉬웠다. 감사! – user826955

+0

iOS 7.0에서는'drawAtPoint : forWidth : withFont : lineBreakMode :'가 사용되지 않습니다. "대신에'drawInRect : withAttributes :'를 사용하십시오." @iJordan 당신은 어떻게하는지 압니까? – Cong

0

특정 너비와 글꼴에 허용되는 최대 문자 수를 알고 싶습니다. 불행하게도 그것은 알기가 불가능합니다. 문자 크기가 다양하기 때문에 ('m'은 'l'보다 넓습니다).

[@"Your text here" sizeWithFont:yourFont minFontSize:smallestFontSizeYouWillAccept actualFontSize:&pointerToYourFontSizeFloatValue forWidth:yourWidthConstraint lineBreakMode:yourLineBreakMode]; 

(당신이 포인터를 통과하기 때문에) 이것은 당신의 fontSize는 플로트 값을 변경하고 지금 당신이없이 사용할 수있는 가장 큰 글꼴 크기입니다 :

은 당신이 할 수있는 것은 호출입니다 줄 바꿈. 플로트를 사용하여 새 글꼴을 만들고 크기를 플로트로 설정할 수 있습니다.

희망이 도움이됩니다.

0

이 방법은 귀하의 경우 도움이 될 것입니다 : 귀하의 경우