2010-03-31 7 views
5

plist에서 도움말 텍스트를로드하고 UIScrollView에 보관 된 UILabels의 형태로 같은 내용을 표시합니다. 코드의 부분은 다음과 같습니다 어떤 '긴'텍스트가 올바르게 여러 행으로 감싸지고 있지만UILabel에서 줄 바꿈이 작동하지 않습니다.

UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease]; 
    sectionDetailLabel.backgroundColor = [UIColor clearColor]; 
    sectionDetailLabel.numberOfLines = 0; 
    sectionDetailLabel.font = [UIFont systemFontOfSize:12]; 
    sectionDetailLabel.textColor = [UIColor blackColor]; 
    sectionDetailLabel.textAlignment = UITextAlignmentLeft; 
    sectionDetailLabel.lineBreakMode = UILineBreakModeWordWrap; 

    [baseScrollView addSubview:sectionDetailLabel]; 

    [sectionDetailLabel setText:myStringForThisSection]; 
    [sectionDetailLabel sizeToFit]; 

, 내가 'myStringForThisSection의 문자'N \ '수동으로 줄 바꿈을 사용하는 행 구분을 삽입 할 수 없어요 '. 대신 줄 바꿈을 원할 때마다 UILabel에 '\'및 'n'문자 만 표시됩니다.

나는 이것을 보았고 일반적인 합의는 numberOfLines를 0으로 설정하고 lineBreakMode를 유효한 값으로 설정하고 sizeToFit을 호출하거나 sizeWithFont에 기반한 UILabel의 프레임을 설정해야한다고 생각했습니다. :) 이 모든 것들은 위의 코드에서 보이는 것처럼 보이며, 알려지지 않은 길이의 긴 문자열을 UILabel의 여러 줄에 넣을 때 완벽하게 작동합니다. 그럼 여기서 무엇을 놓칠 수 있겠습니까?

참고 : baseScrollView, myStringForThisSection 및 myOriginForThisSection과 같은 모든 변수는 위 코드가 실행되기 전에로드되어 정상적으로 작동합니다.

+0

경우이 발생합니다. 코드에서 선언되었거나 생성 된 경우 (아마도 plist에서도 가능), 개행은 그 자체로 인코딩됩니다. 하지만 그 줄이 공백 줄이면 줄 바꿈 뒤에 공백이 와야합니다. –

답변

8

UILabel은 이스케이프 시퀀스 \ n을 해석하지 않습니다. 캐리지 리턴 및/또는 줄 바꿈을 나타내는 실제 문자를 삽입 할 수 있습니다. 개행 문자를 담아 문자를 삽입하십시오.

unichar newLine = '\n'; 
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1]; 
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR]; 

myStringForThisSection을 변경할 수있는 한 그렇게해야합니다.

unichar chr[1] = {'\n'}; 
NSString *cR = [NSString stringWithCharacters:(const unichar *)chr length:1]; 

는 다음과 같은 코드 뭔가에 사용 :

+0

그게 효과가! 고마워. –

+0

이스케이프 처리 된 캐리지 리턴, 즉 '\ r'도 작동합니다. 스위프트 3, iOS 10+ 이상에서 – Chris

3

내가 대신을 시도 엑스 코드 4.3

위 스코틀랜드 구스타프손의 대답에 문제가 있었다

self.myLabel.text = [NSString stringWithFormat:@"First Label Line%@Second Label Line", cR]; 
+0

그것은 오래되었습니다. "insertAtIndex"유형의 명령어를 사용하지 않는 것이 장점인데, 이는 항상 위험 할 수 있습니다. 특히 여러 다른 언어로 데이터를 처리 할 때 특히 그렇습니다. 다른 사람이 이것을 특히 유용하게 찾거나 이전 코드도 구식이라면이 답변을 "홍보"하거나 투표 할 수 있습니다. –

+0

Dev 어느 쪽의 방식으로 작동합니까, 내가하는 방식은 내 같은 단순한 마음에 더 의미가 있습니다! 나는 당신의 singleCR에 대한 정의에 문제가있었습니다. IOS5 xCode 4.3.1에서 오류가있었습니다. – DoctorG

+0

Hehe. 일단 시간이 있으면 두 가지 해결책을 모두 확인하고 다시 게시 할 것입니다. –

1

을 나는 할 수 없었다 Scott & DoctorG의 솔루션이 효과가 있지만 (너무 많은 시간을 소비하지는 않았지만) 이스케이프 처리 된 텍스트를 추출 할 때 나에게 적합한 간단한 솔루션이 있습니다. xml 파일에서. 내 문자열 함수 클래스 내부

, 나는 정의 : 문자열이 외부 소스에서 오는

+(NSString)escapeXml:(NSString*)string { 
    return [string stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; 
} 
관련 문제