Как добавить многострочный текст в UIButton? - PullRequest
349 голосов
/ 03 марта 2009

У меня есть следующий код ...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

... идея в том, что у меня может быть многострочный текст для кнопки, но текст всегда скрыт backgroundImage UIButton. Запись в журнал для отображения подпредставлений кнопки показывает, что UILabel была добавлена, но сам текст не виден. Это ошибка в UIButton или я делаю что-то не так?

Ответы [ 26 ]

653 голосов
/ 02 декабря 2009

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

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
// you probably want to center it
button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to 
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

Для iOS 5 и ниже используйте следующее, чтобы разрешить несколько строк:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
// you probably want to center it
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

2017, для iOS9 вперед ,

В общем, просто сделайте эти две вещи:

  1. выберите «Атрибутивный текст»
  2. во всплывающем окне «Разрыв строки» выберите «Перенос слов»
135 голосов
/ 14 мая 2014

Выбранный ответ правильный, но если вы предпочитаете делать такие вещи в Интерфейсном Разработчике, вы можете сделать это:

pic

54 голосов
/ 21 октября 2015

Если вы хотите добавить кнопку с заголовком, центрированным несколькими строками, установите настройки Interface Builder для кнопки:

[here]

53 голосов
/ 08 октября 2012

Для IOS 6:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

как

UILineBreakModeWordWrap and UITextAlignmentCenter

устарели в IOS 6 и более поздних версиях

30 голосов
/ 28 октября 2010

Чтобы переформулировать предложение Роджера Нолана, но с явным кодом, это общее решение:

button.titleLabel?.numberOfLines = 0
20 голосов
/ 08 мая 2017

SWIFT 3

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.textAlignment = .center  
button.setTitle("Button\nTitle",for: .normal)
11 голосов
/ 28 июня 2013

Выравнивание по левому краю на iOS7 с автоматическим расположением:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentLeft;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
11 голосов
/ 25 октября 2009

Есть гораздо более простой способ:

someButton.lineBreakMode = UILineBreakModeWordWrap;

(Изменить для iOS 3 и более поздних версий:)

someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
7 голосов
/ 03 марта 2009

Прежде всего, вы должны знать, что в UIButton уже есть UILabel. Вы можете установить его, используя –setTitle:forState:.

Проблема с вашим примером состоит в том, что вам нужно установить для свойства numberOfLines UILabel значение, отличное от значения по умолчанию, равного 1. Также следует просмотреть свойство lineBreakMode.

5 голосов
/ 31 мая 2018

В Xcode 9.3 вы можете сделать это, используя раскадровку , как показано ниже,

enter image description here

Вам необходимо установить заголовок кнопки textAlignment по центру

button.titleLabel?.textAlignment = .center

Вам не нужно устанавливать текст заголовка с новой строкой (\ n), как показано ниже,

button.setTitle("Good\nAnswer",for: .normal)

Просто установите заголовок,

button.setTitle("Good Answer",for: .normal)

Вот результат,

enter image description here

...