UIButton с многострочной titleLabel в интерфейсеBuilder
Мне было интересно, есть ли хороший способ сделать UIButtons
с многострочным titleLabel
в Interface Builder? Я не нашел ни одного и положил отдельную UILabel
поверх каждой кнопки и отслеживал ее цвет при печати, а другие события были не очень простыми.
Может быть, в коде есть лучшие альтернативы, если в IB нет такого пути?
Ответы
Ответ 1
Код:
Чтобы разрешить несколько строк, вы можете использовать:
button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
В iOS 6, UILineBreakModeWordWrap
и UITextAlignmentCenter
устарели, поэтому используйте:
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
Конструктор интерфейсов:
- В построителе интерфейса выберите UIButton
- в правой части панели "Утилиты" в разделе "Инспектор атрибутов" вы увидите опцию "Разрыв строки"
- Выберите Word Wrap
Ответ 2
Вы можете сделать это только в интерфейсе Builder несколькими способами.
- Сначала просто установите функцию обертки. Это предлагает ограниченную возможность настройки.
- Для большей настраиваемости измените "Обычный текст" на "Атрибутный текст", а затем вы можете делать большинство вещей без какого-либо кода.
Ответ 3
Просто чтобы упомянуть, если вы не хотите переносить слова, но все же хотите получить многострочный заголовок в UIButton, это можно сделать, установив lineBreakMode перед numberOfLines,
Это связано с тем, что lineBreakMode, похоже, отменяет setOfLines, поэтому мы делаем это в этом порядке.
Swift:
button.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail
button.titleLabel?.numberOfLines = 2
button.setTitle(myTitle, для: UIControlState.normal)