Как вы центрируете текст построчно в UIButton с помощью Interface Builder? Перебираю варианты и не вижу. Вот кнопка:
Центрировать многострочный текст на UIButton с помощью IB
Ответы (7)
Вы не можете установить текст по центру пера. Но вы можете изменить выравнивание в своем коде:
- (void)viewDidLoad {
[super viewDidLoad];
self.myButton.titleLabel.textAlignment = UITextAlignmentCenter;
}
textAlignment = UITextAligmentCenter
работает в моем тестовом проекте.
- person rob mayoff; 28.01.2012
UITextAlignmentCenter
устарело в iOS6, лучше используйте self.myButton.titleLabel.textAlignment = NSTextAlignmentCenter;
- person Esteve; 26.08.2014
NSTextAlignment.Center
. Если вы создадите свой собственный класс кнопки, вы можете сделать это в его инициализации/конструкторе: self.titleLabel?.textAlignment = NSTextAlignment.Center
- person Soko; 31.12.2014
Я знаю, что это старый вопрос, но я столкнулся с ним в своей собственной попытке центрировать многострочный текст UIButton в IB. Я обнаружил, что по умолчанию, когда для «заголовка» установлено значение «обычный», а для «разрыва строки» установлено значение «перенос слов», самая длинная строка текста заголовка центрируется, а другие строки выравниваются по левой стороне этой строки ( аналогично снимку экрана ОП).
Чтобы все строки были отцентрованы правильно, «заголовок» необходимо изменить на «атрибут». Это предоставляет гораздо больше возможностей для настройки внешнего вида текста заголовка. Отцентрируйте каждую из строк текста (теперь вы можете изменить выравнивание для каждой строки отдельно). Также не забудьте установить «разрыв строки» на «перенос слов» под «больше ...» над текстом. Кажется, есть ошибка в том, как ведет себя эта опция разрыва строки, по крайней мере, в Xcode 4.5 в настоящее время, потому что текст на кнопке в IB будет выглядеть неправильно, обрезая все, кроме первой строки. Кажется, что параметры «переноса слов» и усечения интерпретируются в обратном порядке в IB, но если вы запустите приложение, оно будет вести себя правильно в симуляторе.
На самом деле вы можете сделать это в конструкторе интерфейсов.
Просто установите для заголовка значение «Атрибут», а затем выберите выравнивание по центру.
@from comment : для переноса вам нужно установить разрыв строки на перенос символов или перенос слов.
PS: это может не отображаться в xcode. Но это будет работать во время выполнения.
Вы можете установить центральный многострочный текст в UIButton через раскадровку.
Вот как вы делаете текст состоящим из двух или более строк.
Установите указанный ниже ключевой путь в
Инспектор удостоверений --> Определенные пользователем атрибуты среды выполнения --> добавить новую пару "ключ-значение" ниже
titleLabel.textAlignment - NSNumber - 1
и
titleLabel.numberOfLines - NSNumber - 5 - or use "0" meaning "any number"
Это будет выглядеть так:
Обратите внимание, что (2016), к сожалению, на самом деле он не отображает две или более строк текста в раскадровке (вы видите только первую), но он отлично работает при запуске в симуляторе или на устройстве.
Для IB установите для заголовка значение «Атрибуция» и выберите выравнивание по центру (например, предложено Александром Даниловым)
Но если вы хотите сделать это в коде, используя Swift 4:
// center button text
yourButton.titleLabel?.textAlignment = .center
// enable multiline if needed
yourButton.titleLabel?.numberOfLines = 0
Не все параметры выполняются с помощью Interface Builder, поэтому вы должны сделать некоторые из них с помощью кода, и обычно мы делаем их внутри функции viewDidLoad
.
Чтобы центрировать текст внутри кнопки с помощью кода, вы можете использовать следующее:
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Вы можете использовать ту же технику для выравнивания текста в любом направлении, например, влево:
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Но это уведет текст слишком далеко влево, и вам может понадобиться немного места перед ним, сохраняя выравнивание по левому краю, поэтому вы добавляете вставку после кода выравнивания следующим образом:
button1.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
В данном случае мы смещаем текст по оси Y на 10 пунктов. Я говорю здесь точки, а не пиксели, потому что, как вы знаете, Apple использует технику точек для измерения расстояний, чтобы иметь возможность легко адаптироваться между обычным дисплеем и дисплеем сетчатки (где сетчатка в 2 раза больше обычного).
viewDidLoad
). Если тот, кто спрашивал, не знал способа кодирования, мы ожидаем, что он прокомментирует этот ответ, и после этого мы ответим на его новый комментарий по коду. По этому я вижу, что этот ответ помогает парню, задающему вопрос, и спасибо за ваш комментарий.
- person antf; 28.01.2012
Я еще не пробовал, но я думаю, что это можно сделать, создав CGRect поверх вашей кнопки, затем используя его как рамку, создав метку, а затем вы можете поиграть с меткой, установить textAlignment, чтобы быть UITextAlignmentCenter, и установить цвет фона, чтобы быть прозрачным.
Это работает с uitableview, но я не знаю, будет ли это работать для кнопки. Надеюсь это поможет.