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


141

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

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

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

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


7
Кумар Ратор - попробуйте по кодуself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Сагар Р. Котари

1
@Spark Я знаю, как это сделать с помощью кода, но я хотел установить его с помощью IB.
Индер Кумар Ратор

Я знаю, вы хотите установить его с помощью IB. Но такое свойство доступно только через код.
Сагар Р. Котари

Он доступен через IB, сделав его атрибутированным, но кого это волнует!
Юсеф Моавад,

Ответы:


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

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): введите описание изображения здесь


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];


13

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

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


12

Для swift 4, xcode 9

myButton.contentHorizontalAlignment = .center

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

7

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

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;


4

UITextAlignmentCenter устарело в iOS6

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

btn.titleLabel.textAlignment=NSTextAlinmentCenter;


Для вызываемого UIButton свойства textAlignment нет.
Рави

В iOS нет такого свойства для UIButton
Jayprakash Dubey

Он имеет в виду button.titleLabel.textAlignment
OC Rickard


3

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

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


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

3

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

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

2

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


1

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

Для справки

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.