Подтвердить что ты не робот

Центр многострочного текста на UIButton с использованием IB

Как вы центрируете текст по строкам в UIButton с помощью Interface Builder? Я просматриваю варианты и просто не вижу этого. Здесь кнопка:

button with text not centered

4b9b3361

Ответ 1

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

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myButton.titleLabel.textAlignment = UITextAlignmentCenter;
}

Ответ 2

Я знаю, что это старый вопрос, но я натолкнулся на это в своей собственной попытке сосредоточить многострочный текст UIButton в IB. Я обнаружил, что по умолчанию, когда для "title" установлено значение "plain", а "break line" устанавливается на "word wrap", самая длинная строка текста заголовка центрируется, а остальные строки остаются в силе в этой строке ( аналогично захвату экрана OP).

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

Ответ 3

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

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

@из комментариев: для переноса необходимо установить перенос строки на перенос символов или перенос слов.

P.S.: Это может не отображаться в xcode. Но это будет работать во время выполнения.

Ответ 4

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

Вот как вы делаете текст двумя или более строками.

Установите нижний ключ Path в

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

titleLabel.textAlignment - NSNumber - 1

и

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

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

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

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

Ответ 5

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

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

button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

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

button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

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

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

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

Ответ 6

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

Но если вы хотите сделать это в коде с помощью Swift 4:

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

// enable multiline if needed
yourButton.titleLabel?.numberOfLines = 0 

Ответ 7

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

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