Как сделать центр выравнивания текста UIButton?Используя IB - PullRequest
133 голосов
/ 19 апреля 2011

Я не могу установить заголовок кнопки UIB, используя IB в качестве центра. Мое название многострочное.
Это даёт вот так
enter image description here

Но я хочу вот так
enter image description here

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

Спасибо

Ответы [ 15 ]

181 голосов
/ 20 сентября 2011

Это будет именно то, что вы ожидали:

Objective-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

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

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

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

Swift:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center
103 голосов
/ 19 апреля 2011

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

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

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

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

[labelOne setTextAlignment:UITextAlignmentCenter];

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

82 голосов
/ 03 мая 2011

Solution1

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

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

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

enter image description here

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

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

enter image description here

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

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

  1. Подкласс UIButton для создания кнопки:

    <code>import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}
    
  2. Назначьте этот настраиваемый подкласс для кнопок, которые вы изменяете:

Showing how to change the class of the button using Interface Builder

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

Comparing the designable and default button in Interface Builder



Solution2

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

1.Создать IBOutlet для кнопки
2. Напишите код в viewDidLoad

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


Solution3

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

P.S. Текст не был многострочным, для этого я должен установить

btn.titleLabel.numberOfLines = 0

enter image description here

26 голосов
/ 15 марта 2012

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

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
16 голосов
/ 08 августа 2014

Для ios 8 и Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

или

btn.titleLabel.textAlignment = .Center

12 голосов
/ 20 декабря 2012

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

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

9 голосов
/ 26 октября 2017

Для swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
7 голосов
/ 31 августа 2013

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

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
4 голосов
/ 08 апреля 2013

UITextAlignmentCenter устарела в iOS6

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

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

3 голосов
/ 08 июня 2017

для Swift 3.0

btn.titleLabel?.textAlignment = .center
...