UILabel에 줄 바꿈을 추가하는 방법?


262

다음과 같은 문자열이 있는지 확인하십시오.

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  

UILabel이 다음과 같은 메시지를 표시하도록하려면 어떻게해야합니까

AAAAA
BBBBB
CCCCC

\nUILabel에 의해 인식 되지 않는다고 생각 하므로 UILabel이 줄 바꿈을 만들어야한다는 것을 알 수 있도록 NSString에 넣을 수있는 것이 있습니까?

답변:


332

\n문자열에서 사용하는 대로 사용하십시오 .

여러 줄을 허용하려면 numberOfLines를 0으로 설정하십시오.

label.numberOfLines = 0;

를 사용하여 텍스트의 크기와 일치하도록 레이블 프레임을 업데이트하십시오 sizeWithFont:. 이 작업을 수행하지 않으면 텍스트가 세로 중앙에 잘 리거나 잘립니다.

UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
                          constrainedToSize:label.frame.size
                              lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

업데이트 : 더 이상 사용되지 않는 교체품

sizeWithFont:constrainedToSize:lineBreakMode:

더 이상 사용되지 않는 sizeWithFont에 대한 참조, iOS 7에서?

CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];

label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

2
UILabel이없는 originsizeiOS에서 속성을? 아마해야한다 label.frame.origin.x
Peterdk

1
sizeWithAttributes를 사용한 다음 프레임을 설정하는 대신 sizeToFit를 호출하여 한 번의 빠른 단계로 운동하고 프레임 크기를 설정할 수 있습니다.
jimmyjudas

@Hermang, 최신 답변을 수정 해 주셔서 감사합니다.
Gerry Shaw

274

여기에 이미지 설명을 입력하십시오

Interface Builder의 작은 상자에 입력 할 때 옵션 반환을 사용하여 줄 바꿈 (\ n)을 삽입하십시오. 인터페이스 빌더의 레이블 속성에서 # Lines = 0을 설정하십시오.

레이블을 선택한 다음 위 이미지에서와 같이 줄 속성을 0으로 변경 한 다음 줄 바꿈을 위해 문자열에 \ n을 사용하십시오.


2
이것은 매우 유용합니다!
Nitin Alabur

이것을 영원히 찾았습니다. 감사합니다 :)
Shai Mishali

환상적인 답변. 감사!
Macondo2Seattle

1
프로그래밍 방식으로 레이블을 설정하고 문자열에 \ n (줄 바꿈)을 추가하면 작동하지 않습니다.
Chewie The Chorkie

놀랄 만한. 내 요구 사항은 스토리 보드 레이블로만 수행하는 것입니다. 그리고 이것은 매력처럼 작동했습니다.
Tejas

132

XML 파일에서 문자열을 읽으면이 문자열의 줄 바꿈 \nUILabel텍스트 에서 작동하지 않습니다 . 은 \n줄 바꿈으로 해석되지 않습니다.

이 문제를 해결하기위한 약간의 요령은 다음과 같습니다.

// correct next line \n in string from XML file
NSString *myNewLineStr = @"\n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr];

myLabel.text = myLabelText;

따라서 \n문자열의 구문 분석되지 않은 부분을 \n하드 코딩 된 구문 분석 된 구문 으로 대체 해야합니다 NSString.

다른 라벨 설정은 다음과 같습니다.

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;

가장 중요한 것은 (= 라벨에 무제한 줄 수 )로 설정 numberOfLines하는 것 0입니다.

Apple이 \nXML에서 읽은 문자열을 구문 분석하지 않기로 선택한 이유 를 모르십니까?

도움이 되었기를 바랍니다.


1
\nParse.com에서 문자열을 가져올 때 iOS가 구문 분석하지 않습니다 (다른 API에서 문자열을 가져올 때도 발생 함)
Brian

당신은 내 하루를 구했습니다. XML 파일에서 줄 바꿈 문자열이 나타납니다.
Senry

127

인터페이스 빌더에서 Ctrl+ Enter를 사용 하여 /n원하는 위치 에 삽입 할 수 있습니다 . 이 방법은 다음 상황을 구현할 수 있습니다

aaa
aaaaaaa


아니요, 투표하지 않았습니다. 더 나은 프리젠 테이션을 위해 답변을 편집했습니다.
Manoj Kumar

정말 간단합니다! +1
marlonpya

2
내가 그 트릭을 몰랐다는 것을 믿을 수 없다! shift-Enter는 다른 곳에서 상당히 표준이기 때문에 시도했습니다. 고마워요!
Echelon

이것은 내가 찾던 것입니다! +1 감사합니다!
rickrvo

1
좋은 포스트! 작은 보정 : 저는 믿습니다 당신의 평균 삽입 \ n 대신 삽입 / N의
공예

25

numberOfLines속성 을 설정해야 합니다 UILabel. 기본값은 1 이며 0으로 설정하면 모든 제한이 제거됩니다.


22

중요 그것의주의하기 \n보다는 (백 슬래시) /n.


10

Swift 2.2에서> iOS 8

Storyboard의 Attribute Inspector 아래에서 Lines = 0을 설정하고 참조 콘센트를 레이블에 연결했습니다. 그런 다음 컨트롤러에서 다음과 같이 사용하십시오.

 @IBOutlet weak var listLabel: UILabel!

 override func viewDidLoad() {
      ...
      listLabel.text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8"
 }

6

// numberOfLines를 0으로 설정하는 것을 잊지 마십시오

UILabel* locationTitle = [[UILabel alloc] initWithFrame:CGRectMake(5, 30, 230, 40)];
locationTitle.font = [UIFont systemFontOfSize:13.0];
locationTitle.numberOfLines = 0;
locationTitle.text = [NSString stringWithFormat:@"Eaton industries pvt. Ltd \nUK Apr 12"];
[cell addSubview:locationTitle];

6

그냥 이렇게 해

NSString * strCheck = @"A\nB";

strCheck = [strCheck stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];  //This is to prevent for fetching string from plist or data structure

label.numberOfLines = 0;

label.lineBreakMode = NSLineBreakByWordWrapping;

label.text = strCheck;

4

Xcode 6에서는 줄 바꿈을 사용할 때 문자열 내부에서도 \ n을 사용할 수 있습니다. 작동합니다. 예를 들어 :

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, screenRect.size.width, 50)];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"This will be on the first line\nfollowed by a line under it.";
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;

3

를 사용하는 경우 UILabel기본 설정이 1 줄임을 기억해야하므로 추가 한 나누기 횟수 ( \n또는 \r) 가 중요하지 않은 경우 추가 할 수 있도록 둘 이상의 행으로 설정되어 있는지 확인해야합니다. 더 많은 라인.

하나의 대안은 UITextView실제로 여러 줄을위한 것입니다.

UILabel의 XCode 속성 섹션에서이를 쉽게 달성 할 수 있습니다 (스크린 샷 참조).

여기에 이미지 설명을 입력하십시오


3

쉬운 솔루션을 원하는 사용자를 위해 텍스트 레이블 입력 상자에서 다음을 수행하십시오.

숫자 줄이 0으로 설정되어 있는지 확인하십시오.

Alt + Enter

(Alt는 옵션 키입니다)

건배!



2

제 경우에도 \ n 작동하지 않았습니다. 행 수를 0으로 유지하여 문제를 해결하고 Hello \ n World 대신 붙여 넣는 대신 예를 들어 텍스트를 새 행으로 붙여 넣었습니다.

여보세요

세계

인터페이스 빌더에서.


우수한! 공장.
DmitryKanunnikoff

2

xCode 11에서 Swift 5는 \n정상적으로 작동합니다. 아래 코드를 시도하십시오.

textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"

1
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);

0

sizeWithFont:constrainedToSize:lineBreakMode:ios8로 전환하는 데 문제가 있거나 ios8로 전환하는 사람은 (ios7에서 더 이상 사용되지 않음) sizeToFit대신 사용하여 높이를 조정 했습니다.

UILabel *label;
label.numberOfLines = 0;
// Setup label with desired settings
...
[label sizeToFit];
label.frame = CGRectMake(label.frame.origin.x,     // Or use any desired origin
                         label.frame.origin.y, 
                         label.frame.size.width,   // Or use any desired width
                         label.frame.size.height);

0
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];

0

특히 자동 레이아웃을 사용할 때 레이블 프레임 크기를 변경하는 것은 잘못된 것 같습니다. appendFormat 메소드를 사용하는 것이 더 적절 해 보입니다. 내 예는 다음과 같습니다.

NSMutableString *list = [[NSMutableString alloc] init];
NSArray *textArray = @[@"AAAA", @"BBBB"];
for (NSString *string in textArray) {
    [list appendFormat:@"%@\n", string.mutableCopy];
}
self.label.text = list;
self.label.numberOfLines = 0;

0

UILable 속성을 Plain에서 Attributed로 설정하면 UILabel은 UILabel 높이와 너비가 텍스트를 표시하려는 화면 영역에 맞게 설정된 단락 수에 관계없이 여러 줄로 된 텍스트를 보유합니다.


0

나는 똑같은 문제에 직면했으며 여기에서 문제를 해결하는 방법이 있습니다. 이것이 누군가에게 도움이되기를 바랍니다.

// 스위프트 2

   lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
   lblMultiline.numberOfLines = 0 

// 오브젝티브 -C

  lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
  lblMultiline.numberOfLines = 0;

// C # (Xamarin.iOS)

  lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
  lblMultiline.Lines = 0;  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.