Как добавить разрыв строки для UILabel? - PullRequest
245 голосов
/ 22 февраля 2010

Давайте посмотрим, что у меня строка выглядит следующим образом:

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

Как мне сделать так, чтобы UILabel отображал сообщение вот так

ААААА
BBBBB
CCCCC

Я не думаю, что \n распознается UILabel, поэтому есть ли что-то, что я могу поместить в NSString, чтобы UILabel знал, что он должен создать разрыв строки там?

Ответы [ 19 ]

3 голосов
/ 25 октября 2013

Если вы используете UILabel, вы должны помнить, что значение по умолчанию равно 1 строке, поэтому не имеет значения, сколько разрывов вы добавляете (\n или \r), вам необходимо убедиться, что оно установлено более чем на одну строку, чтобы можно было добавить несколько строк.

Одной из альтернатив является использование UITextView, которое действительно предназначено для мультилиней.

Вы можете легко добиться этого в разделе атрибутов XCode UILabel, см. Скриншот:

enter image description here

2 голосов
/ 10 января 2014

Просто с помощью label.numberOfLines = 0;

2 голосов
/ 15 августа 2015

В моем случае \ n также не работало, я исправил проблему, сохранив число строк равным 0, скопировал и вставил текст с новой строкой, например вместо Hello \ n World, который я вставил

Hello

Мир

в конструкторе интерфейсов.

1 голос
/ 15 августа 2015
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 голосов
/ 16 февраля 2015
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
0 голосов
/ 07 декабря 2015

Я столкнулся с той же проблемой, и вот, как я решил проблему. Надеюсь, это кому-нибудь пригодится.

// Swift 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;  
0 голосов
/ 11 августа 2015

Если вы установите свойства UILable из Обычного в Атрибут ... UILabel будет хранить многострочный текст независимо от того, сколько параграфов и высоты и ширины UILabel установлены в соответствии с областью экрана, в которой вы хотите отобразить текст.

0 голосов
/ 06 июля 2015

Мне кажется неправильным изменять размеры рамки надписи, особенно при использовании автоматического размещения. Использование метода 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 голосов
/ 16 июля 2014

Для всех, у кого могут быть проблемы с sizeWithFont:constrainedToSize:lineBreakMode: или для тех, кто переключается на 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);
...