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

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

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

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

ААААА
BBBBB
CCCCC

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

Ответы [ 19 ]

318 голосов
/ 23 февраля 2010

Используйте \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:

Ссылка, Замена устаревшего размера с шрифтом: в 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);
262 голосов
/ 04 января 2011

enter image description here

Используйте option-return при вводе в маленькое поле в Интерфейсном Разработчике, чтобы вставить перевод строки (\ n). В атрибутах Label Интерфейсного Разработчика установите # Lines = 0.

Выберите метку и затем измените свойство Lines на 0, как на картинке выше, а затем используйте \ n в вашей строке для разрыва строки.

130 голосов
/ 04 января 2011

Если вы читаете строку из файла XML, разрыв строки \n в этой строке не будет работать в тексте UILabel. \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 решила не анализировать \n в строках, прочитанных из XML?

Надеюсь, это поможет.

103 голосов
/ 14 сентября 2015

В конструкторе интерфейса вы можете использовать Ctrl + Введите , чтобы вставить /n в нужную позицию. Таким способом можно реализовать следующую ситуацию

ааа
ааааааа

25 голосов
/ 22 февраля 2010

Вы должны установить свойство numberOfLines для UILabel. По умолчанию 1 , если вы установите его на 0 , все ограничения будут удалены.

22 голосов
/ 10 мая 2010

Важно отметить, что это \n (обратный слеш), а не /n.

8 голосов
/ 10 июня 2016

В Swift 2.2,> iOS 8

Я установил 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 голосов
/ 05 марта 2012

// НЕ забудьте установить numberOfLines на ноль

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];
5 голосов
/ 28 июля 2016

Просто сделай это так

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;
3 голосов
/ 22 июля 2015

В 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;
...