2013-10-07 2 views
2

"아름다운 시내 볼티모어시에 위치"와 같이 긴 문자열을 고려하십시오.UILabel : 텍스트의 일부분에만 줄 바꿈 모드 적용

내 레이블이 텍스트에 너무 작고, 현재 다음과 같이 표시합니다 :

Located in beautiful downtown Ba…

내가 위치 문자열이 중심이 문자열 "에 위치한"잘라 내지 않고 를 절단하고 싶습니다, 이 같은 :

아름다운에 위치한

... ltimore 도시

UILabel class reference이 가능해야한다 나타냅니다

당신은 텍스트의 일부에 줄 바꿈 모드를 적용하여 원하는 스타일 정보와 새로운 기인 문자열을 생성하고 라벨과 연결하려면

. 스타일이 지정된 텍스트를 사용하지 않는 경우이 속성은 텍스트 속성의 전체 텍스트 문자열에 적용됩니다. 샘플 프로젝트에서

는 하나의 UILabel의로, 나는 다음과 같은 코드로 다음 지침을 따르 시도 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString *firstPart = @"Located in"; 
    NSString *secondPart = @"beautiful downtown Baltimore City"; 
    NSString *joined = [NSString stringWithFormat:@"%@ %@", firstPart, secondPart]; 

    NSMutableAttributedString *joinedAttributed = [[NSMutableAttributedString alloc] initWithString:joined]; 

    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; 
    style.lineBreakMode = NSLineBreakByTruncatingMiddle; 

    NSRange detailRange = [joined rangeOfString:secondPart]; 

    [joinedAttributed addAttribute:NSParagraphStyleAttributeName value:style range:detailRange]; 

    self.label.attributedText = joinedAttributed; 
} 

내 레이블은 여전히 ​​끝의 절단과 같은 나타납니다. 여기

최종 결과는 디버거에서 어떻게 표시되는지를 보여줍니다 :

(lldb) po joinedAttributed 
Located in { 
}beautiful downtown Baltimore City{ 
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 5, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0"; 
} 

사람이이 작업을받은 적이 있습니까? 구현에서 누락 된 부분은 무엇입니까?

+0

UILabel의 lineBreakMode를 NSLineBreakByTruncatingMiddle로 설정해 보셨습니까? 귀착 된 텍스트로 원숭이를하지 않고도 원하는 것을 얻는 것처럼 보입니다. –

+0

예; 이것은 전체 문자열을 자릅니다. 원하는 결과는 부분 문자열 ('secondPart')을 자릅니다. –

+0

글쎄, 당신은 라벨에 대한 lineBreakMode 설정 스타일을 시도 해 봤나? –

답변

0

UILabel 두 개를 사용하지 않는 이유는 무엇입니까? 첫 번째 텍스트에는 "위치한"텍스트가 포함되어 있고 두 번째 텍스트에는 원하는 텍스트가 모두 포함되어 있습니다. 그런 다음 NSLineBreakByTruncatingMiddle 속성을 두 번째 레이블에만 적용 할 수 있습니다. 동일하다는 환상을주기 위해 서로 옆에 위치시켜야합니다. UILabel.

희망이 도움이됩니다.

+0

이 방법은 글꼴 커닝을 사용하지 않으므로 잘 보이지 않습니다. –