Как сделать центр выравнивания текста UIButton? Использование IB

141

Я не могу установить заголовок UIButton, используя IB в качестве центра. Мое название многострочное.
Он дает как этот
введите описание изображения здесь

Но я хочу вот такой
введите описание изображения здесь

Я дал в этом место, но я не хочу этого делать. Поскольку в некоторых случаях он не выровнен точно, и я знаю, что есть свойство UILabel для установки выравнивания, но я не хочу писать для этого код ... просто хочу установить все из IB.

Благодарность

Индер Кумар Ратор
источник
7
Кумар Ратор - попробуйте по кодуself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Сагар Р. Котари
1
@Spark Я знаю, как это сделать с помощью кода, но я хотел установить его с помощью IB.
Индер Кумар Ратор
Я знаю, вы хотите установить его с помощью IB. Но такое свойство доступно только через код.
Сагар Р. Котари
Он доступен через IB, сделав его атрибутированным, но кого это волнует!
Юсеф Моавад,
@YoussefSami, да, вы правы stackoverflow.com/a/5865500/468724
Индер Кумар Ратор,

Ответы:

197

Получится именно то, что вы ожидали:

Цель-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Для iOS 6 и выше это

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

как объяснено в ответе tyler53

Swift:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.x и выше

myButton.titleLabel?.textAlignment = .center
RGML
источник
1
В более поздних версиях iOS он стал NSTextAlignment.
Салливан
4
этот код не работает, лучший ответ - @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Альберто Майер
8
В вопросе явно упоминается IB , как в Interface Builder . Это не правильный ответ, так как это требует кодирования.
SwiftArchitect
1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Льюис Блэк,
«Центр» переименован в «центр»
ModusPwnens
108

Используйте строку:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Это должно центрировать контент (по горизонтали).

И если вы хотите установить текст внутри метки в центр, используйте:

[labelOne setTextAlignment:UITextAlignmentCenter];

Если вы хотите использовать IB, у меня есть небольшой пример, который связан в XCode 4, но должен содержать достаточно подробностей (также обратите внимание, поверх этого экрана свойств отображается вкладка свойств. Вы можете найти те же вкладки в XCode 3.x): введите описание изображения здесь

Joetjah
источник
1
спасибо ... но через ИБ ставить не хочу. :( это мой последний вариант сделать это ...
Индер Кумар Ратор
1
@Inder Kumar Rathore: Нет проблем. Чтобы установить его в IB, вы должны щелкнуть по метке, а затем в Attributes Inspector установить для Alignment значение «Center». В моем IB (XCode 4) есть 3 значка, показывающие выравнивание текста. Очевидно, тогда вам следует выбрать средний.
Joetjah
не могли бы вы прислать мне снимок экрана ... Это ярлык кнопки или вы перетащили UILabel из библиотеки ??? Полагаю, это UILabel, а не ярлык кнопки
Индер Кумар Ратор
@Inder Kumar Rathore: Эй, посмотрите скриншот, который я добавил. Я действительно ошибся в том, какие ярлыки вы используете, я все еще думал о UILabel, а не о тексте в UIButton. На снимке экрана показано, как выровнять UIButton через IB.
Joetjah
1
Не позволил бы мне редактировать, но NSTextAlignmentCenter занял место UITextAlignmentCenter. Они означают одно и то же. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard
91

Решение1

Вы можете установить ключевой путь в раскадровке

Установите текст в свой многострочный заголовок, например hello + multiline

Вам нужно нажать +, чтобы переместить текст на следующую строку.

введите описание изображения здесь

Затем добавьте ключевой путь

titleLabel.textAlignmentкак Numberи значение 1, 1означает NSTextAlignmentCenter
titleLabel.numberOfLinesкак Numberи значение 0, 0означает любое количество строк

введите описание изображения здесь

Это не будет отражено в IB / Xcode, но будет в центре во время выполнения (устройство / симулятор)

Если вы хотите увидеть изменения в Xcode, вам необходимо сделать следующее: (помните, что вы можете пропустить эти шаги)

  1. Создайте подкласс UIButton, чтобы сделать кнопку настраиваемой:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}
    

  2. Назначьте этот назначаемый подкласс модифицируемым кнопкам:

Показано, как изменить класс кнопки с помощью Interface Builder

  1. Если все сделано правильно, вы увидите визуальное обновление в IB, когда состояние Designables будет «Актуально» (что может занять несколько секунд):

Сравнение настраиваемой кнопки и кнопки по умолчанию в Интерфейсном Разработчике



Решение2

Если вы хотите написать код, выполните долгий процесс

1. Создать IBOutletдля кнопки 2. Записать
код в viewDidLoad

btn.titleLabel.textAlignment = .Center
btn.titleLabel.numberOfLines = 0


Решение3

В более новой версии xcode (моя - xcode 6.1) у нас есть заголовок с атрибуцией свойства.
Выберите, Attributedзатем выберите текст и нажмите опцию центра ниже.

PS Текст не приходил многострочным, поэтому я должен установить

btn.titleLabel.numberOfLines = 0

введите описание изображения здесь

Индер Кумар Ратор
источник
Для решения 3 вы можете просто добавить Line Breaking = Clip, он преобразует текст в многострочный
finx
У решения 3 есть проблема, по крайней мере, с Xcode 11.3.1: когда я меняю название кнопки, она не работает. когда пользовался btn.titleLabel.textAlignment, отлично работает.
Брайан Хонг,
27

Для UIButton вы должны использовать: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Сирджи
источник
16

Для ios 8 и Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

или

btn.titleLabel.textAlignment = .Center

Эдуардо Фиорези
источник
13

Для тех из вас, кто сейчас использует iOS 6 или выше, UITextAlignmentCenter устарел. Теперь это NSTextAlignmentCenter

ПРИМЕР: mylabel.textAlignment = NSTextAlignmentCenter;отлично работает.

Тайлер53
источник
12

Для swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
Шан Йе
источник
Я установил myButton.titleLabel? .NumberOfLines = 0, и это привело к тому, что метка внутри кнопки центрировалась, поэтому я пытался выяснить, как выровнять текст по левому краю внутри кнопки, и это сработало, установив его на .left, однако.
maxcodes
7

Предполагая, что btn относится к UIButton, чтобы изменить многострочный заголовок, чтобы он был центрирован по горизонтали, вы можете использовать следующий оператор в iOS 6 или новее:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
user1862723
источник
5

Для Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Гжегож Р. Кулеша
источник
используйте один "?" в sender.titleLabel? вместо "??"
Владимир Ковальчук
4

UITextAlignmentCenter устарело в iOS6

Вместо этого вы можете использовать этот код:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
источник
Для вызываемого UIButton свойства textAlignment нет.
Рави
В iOS нет такого свойства для UIButton
Jayprakash Dubey
Он имеет в виду button.titleLabel.textAlignment
OC Rickard
4

Для Swift 3.0

btn.titleLabel?.textAlignment = .center
Мортен Густафссон
источник
3

Фактически вы можете сделать это в конструкторе интерфейсов.

Вы должны установить заголовок на «Приписанный», а затем выбрать выравнивание по центру.

Александр Данилов
источник
Если он указан, мы не сможем установить цвет текста, шрифт и т. Д. Через Storyboard.
Vineesh TP
3

Попробуйте вот так:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Бобби
источник
2

Вы можете сделать это из раскадровки. Выберите свою кнопку. Установите разрыв строки «Word Wrap», установите для вашего заголовка «Plain» значение «Attributed». Выберите «Выравнивание по центру». Эта часть важна => Нажмите кнопку ... (Подробнее). И выберите режим разрыва строки «Перенос символов».

Мустафа Каракуш
источник
1

UIButton не поддерживает setTextAlignment. Итак, вам нужно использовать setContentHorizontalAlignment для выравнивания текста кнопки

Для справки

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Btmanikandan
источник