Центрирование многострочного текста на UIButton с помощью IB - PullRequest
34 голосов
/ 27 января 2012

Как вы центрируете текст построчно в UIButton, используя Interface Builder? Я обыскиваю варианты и просто не вижу этого. Вот кнопка:

button with text not centered

Ответы [ 7 ]

53 голосов
/ 27 января 2012

Вы не можете установить текст в центре пера. Но вы можете изменить выравнивание в вашем коде:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myButton.titleLabel.textAlignment = UITextAlignmentCenter;
}
13 голосов
/ 27 сентября 2012

Я знаю, что это старый вопрос, но я наткнулся на него, пытаясь центрировать многострочный текст UIButton в IB. Я обнаружил, что по умолчанию, когда для «title» установлено значение «plain», а для «break line» установлено значение «перенос слов», самая длинная строка текста заголовка центрируется, а остальные строки выравниваются по левому краю этой строки аналогично снимку экрана ОП).

Для того чтобы все строки были отцентрированы должным образом, заголовок должен быть изменен на "приписан". Это предоставляет гораздо больше возможностей для настройки внешнего вида текста заголовка. Отцентрируйте каждую строку текста (теперь вы можете изменить выравнивание каждой строки отдельно). Также не забудьте установить «разрыв строки» на «перенос слов» в разделе «подробнее ...» над текстом. Кажется, есть ошибка с тем, как ведет себя эта опция разрыва строки, по крайней мере в Xcode 4.5 в настоящее время, потому что текст на кнопке в IB будет выглядеть неправильно, обрезая все, кроме первой строки. Похоже, что «перенос слов» и усечение интерпретируются в IB в обратном направлении, но если вы запустите приложение, оно будет работать правильно в симуляторе.

9 голосов
/ 23 декабря 2014

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

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

8 голосов
/ 18 ноября 2014

Вы можете установить центральный многострочный текст в UIButton через раскадровку.

Таким образом, вы можете сделать так, чтобы текст состоял из двух или более строк.

Установите нижнюю клавишу Path в

Identity Inspector -> Определяемые пользователем атрибуты среды выполнения -> добавить новую пару значений ключей со значениями ниже

titleLabel.textAlignment - NSNumber - 1

и

 titleLabel.numberOfLines - NSNumber - 5 - or use "0" meaning "any number"

Это будет выглядеть следующим образомэто:

enter image description here

Обратите внимание, что (2016), к сожалению, на самом деле он не показывает две или более строк текста в раскадровке (вы видите только первую)), но он отлично работает при запуске в симуляторе или на устройстве.

2 голосов
/ 20 декабря 2017

Для IB установите для Title значение «Attributed» и выберите выравнивание по центру (например, Александр Данилов предложил )

Но если вы хотите сделать это в коде, используя Swift 4 :

// center button text
yourButton.titleLabel?.textAlignment = .center 

// enable multiline if needed
yourButton.titleLabel?.numberOfLines = 0 
2 голосов
/ 27 января 2012

Не все параметры выполняются с помощью Interface Builder, поэтому некоторые из них необходимо выполнять путем кодирования, и обычно мы делаем их внутри функции viewDidLoad.

Чтобы отцентрировать текст внутри кнопки по коду, который вы можетеиспользуйте следующее:

button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Вы можете использовать ту же технику для выравнивания текста в любом направлении, например, влево:

button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

Но это займет слишком много текстаслева и вам может потребоваться некоторое пространство перед сохранением выравнивания по левому краю, поэтому вы добавляете вставку после кода выравнивания следующим образом:

button1.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

В этом случае мы выдвигаем текст изось Y на 10 баллов.Здесь я говорю, что точки - это не пиксели, потому что, как вы знаете, Apple использует технику точек для измерения расстояний, чтобы легко адаптироваться между обычным дисплеем и дисплеем сетчатки (где сетчатка в 2 раза больше нормальной).

0 голосов
/ 28 января 2012

Я еще не пробовал, но я думаю, что для этого можно создать CGRect поверх вашей кнопки, затем использовать его в качестве рамки, создать метку, а затем вы можете поиграть с меткойустановите для свойства textAlignment значение UITextAlignmentCenter и установите цвет фона для очистки.

Это работает с uitableview, но я не знаю, будет ли это работать для кнопки.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...