У меня есть следующий код ...
UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];
... идея в том, что я могу иметь многострочный текст для кнопки, но текст всегда скрыт backgroundImage UIButton. Запись в журнал для отображения подпредставлений кнопки показывает, что UILabel была добавлена, но сам текст не виден. Это ошибка в UIButton или я делаю что-то не так?
ios
cocoa-touch
uibutton
uikit
Оуайн Хант
источник
источник
button.titleLabel?.numberOfLines = 0
Ответы:
Для iOS 6 и выше используйте следующее, чтобы разрешить несколько строк:
Для iOS 5 и ниже используйте следующее, чтобы разрешить несколько строк:
2017, для iOS9 вперед ,
как правило, просто сделайте эти две вещи:
источник
button.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
NSLineBreakMode
, так как:button.titleLabel?.lineBreakMode = .ByWordWrapping
.Выбранный ответ правильный, но если вы предпочитаете делать такие вещи в Интерфейсном Разработчике, вы можете сделать это:
источник
titleLabel.textAlignment
сNumber
значением , чтобы1
в ,User Defined Runtime Attributed
чтобы сделать текст по центруЕсли вы хотите добавить кнопку с заголовком, центрированным несколькими строками, установите настройки Interface Builder для кнопки:
[ ]
источник
Для IOS 6:
В виде
устарели в IOS 6 и далее ..
источник
NSText.h
вFoundation
там нет DEPRECATED добавил. Доступно с 6.0, но не рекомендуется.button.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
button.titleLabel?.textAlignment = NSTextAlignment.Center
Чтобы переформулировать предложение Роджера Нолана, но с явным кодом, это общее решение:
источник
SWIFT 3
источник
В Xcode 9.3 вы можете сделать это с помощью раскадровки, как показано ниже,
Вам нужно установить заголовок кнопки textAlignment по центру
button.titleLabel?.textAlignment = .center
Вам не нужно устанавливать текст заголовка с новой строкой (\ n), как показано ниже,
button.setTitle("Good\nAnswer",for: .normal)
Просто установите заголовок,
button.setTitle("Good Answer",for: .normal)
Вот результат,
источник
myButton.titleLabel.textAlignment = NSTextAlignmentCenter
Заявление также необходимо.Есть гораздо более простой способ:
(Изменить для iOS 3 и более поздних версий :)
источник
Выровнять по левому краю на iOS7 с помощью автоматического размещения:
источник
У меня была проблема с авто-макета, после включения многострочный результат был так: поэтому размер не влияет на размер кнопки я добавил на основе (в этом случае contentEdgeInsets было (10, 10, 10, 10 ) после звонка : надеюсь, это поможет вам (swift 5.0):
titleLabel
Constraints
contentEdgeInsets
makeMultiLineSupport()
источник
Прежде всего, вы должны знать, что в UIButton уже есть UILabel. Вы можете установить его, используя
–setTitle:forState:
.Проблема с вашим примером заключается в том, что вам нужно установить для
numberOfLines
свойства UILabel значение, отличное от значения по умолчанию, равного 1. Вы также должны просмотретьlineBreakMode
свойство.источник
Для тех, кто использует раскадровку Xcode 4, вы можете нажать на кнопку, и в правой части панели утилит в разделе Инспектора атрибутов вы увидите опцию Разрыв строки. Выберите Word Wrap, и у вас все получится.
источник
Ответы здесь расскажут вам, как добиться многострочного заголовка кнопки программно.
Я просто хотел добавить, что если вы используете раскадровки, вы можете нажать [Ctrl + Enter], чтобы вызвать новую строку в поле заголовка кнопки.
НТН
источник
Вы должны добавить этот код:
источник
Что касается идеи Брента о переводе названия UILabel в родную точку зрения, то мне она не кажется очень хорошей идеей. Я продолжаю думать о проблемах взаимодействия с UILabel из-за того, что его сенсорные события не проходят через точку зрения UIButton.
С другой стороны, с UILabel в качестве подпредставления UIButton, я довольно комфортно знаю, что сенсорные события всегда будут передаваться суперпредставлению UILabel.
Я использовал этот подход и не заметил никаких проблем, о которых сообщалось с backgroundImage. Я добавил этот код в -titleRectForContentRect: подкласса UIButton, но этот код также можно поместить в подпрограмму рисования суперпредставления UIButton, которая в этом случае заменяет все ссылки на self на переменную UIButton.
Я нашел время и написал немного больше об этом здесь . Там я также указываю на более короткое решение, хотя оно не совсем подходит для всех сценариев и предполагает взлом некоторых частных просмотров. Также там вы можете скачать готовый к использованию подкласс UIButton.
источник
Если вы используете автоматический макет на iOS 6, вам также может потребоваться установить
preferredMaxLayoutWidth
свойство:источник
Установка lineBreakMode в NSLineBreakByWordWrapping (либо в IB, либо в коде) делает метку кнопки многострочной, но не влияет на рамку кнопки.
Если у кнопки есть динамический заголовок, есть одна хитрость: поместите скрытую UILabel с тем же шрифтом и свяжите ее высоту с высотой кнопки с помощью макета; при установке текста на кнопку и метку и автопоставка сделает всю работу.
Запись
Внутренний размер высоты кнопки в одну строку больше, чем у метки, поэтому, чтобы предотвратить уменьшение высоты метки, ее вертикальный приоритет при перемещении содержимого должен быть больше, чем вертикальное сопротивление сжатию содержимого при нажатии кнопки.
источник
В Swift 5.0 и Xcode 10.2
В вашем ViewController вызов, как это
источник
Swift 5, для многострочного текста в UIButton
источник
Работает отлично.
Добавьте, чтобы использовать это с конфигурационным файлом, таким как Plist, вам нужно использовать CDATA для записи многослойного заголовка, например так:
источник
Если вы используете авто-макет.
источник
Swift 4.0
источник
В наши дни, если вам действительно нужно, чтобы подобные вещи были доступны в конструкторе интерфейсов в каждом конкретном случае, вы можете сделать это с помощью простого расширения, такого как:
Затем вы можете просто установить numberOfLines в качестве атрибута для любого подкласса UIButton или UIButton, как если бы это была метка. То же самое касается целого множества других обычно недоступных значений, таких как угловой радиус слоя вида или атрибуты отбрасываемой тени.
источник
Прокрутите свой собственный класс кнопки. Это, безусловно, лучшее решение в долгосрочной перспективе. UIButton и другие классы UIKit очень ограничены в том, как вы можете их настраивать.
источник
источник
Я включил ответ jessecurry в STAButton, который является частью моей библиотеки с открытым исходным кодом STAControls . В настоящее время я использую его в одном из приложений, которые разрабатываю, и он работает для моих нужд. Не стесняйтесь открывать вопросы о том, как его улучшить или присылать мне запросы на извлечение.
источник
Чтобы исправить расстояние между меткой заголовка и кнопкой, установите titleEdgeInsets и другие свойства перед setTitle:
PS Я проверил установку titleLabel? .TextAlignment не является необходимым, и заголовок выравнивается в
.natural
.источник
Хотя можно добавить подпредставление к элементу управления, нет гарантии, что оно действительно будет работать, поскольку элемент управления может не ожидать его наличия и, следовательно, может вести себя плохо. Если вам это сойдет с рук, просто добавьте метку как одноуровневое представление кнопки и установите ее рамку так, чтобы она перекрывала кнопку; пока он установлен сверху кнопки, ничто, что может сделать кнопка, не затеняет его.
Другими словами:
источник
addSubview:
здесь он добавляется вbutton
суперпредставление, таким образом делая его родным по отношению к кнопке, поэтому соответствие их центров является правильным.