Як зробити центр вирівнювання тексту UIButton? Використання ІБ


140

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

Але я хочу, як цей
введіть тут опис зображення

Я дав простір у цьому, але не хочу цього робити. Оскільки він не вирівняний точно для деяких випадків, і я знаю, що властивість UILabel встановлювати вирівнювання, але я не хочу писати код для цього .. просто хочу встановити все з ІБ.

Дякую


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

1
@Spark Я знаю, як це зробити за кодом, але те, що я хотів, - це встановити його за допомогою "IB".
— Inder Kumar Rathore

Я знаю, ви хочете встановити його за допомогою ІБ. Але така властивість доступна лише за допомогою коду.
— Сагар Р. Котарі

Він доступний через IB, зробивши його атрибутивним, але хто про це дбає!
— Юссеф Мовад

@YoussefSami так, ти правий, stackoverflow.com/a/5865500/468724
— Inder Kumar Rathore

Відповіді:


197

Це дозволить зробити саме те, що ви очікували:

Завдання-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Для iOS 6 або новішої версії це

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

як пояснено у відповіді tyler53

Швидкий:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Швидкий 4.x і вище

myButton.titleLabel?.textAlignment = .center

1
Він став NSTextAlignment у пізніших версіях iOS.
— Салліван

4
цей код не працює, найкраща відповідь - @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
— Альберто

8
У цьому питанні прямо вказано ІБ , як у Interface Builder . Це не правильна відповідь, оскільки вимагає кодування.
— SwiftArchitect

1
Swift 4: myButton.titleLabel? .TextAlignment = .center
— Lewis Black

"Центр" перейменовано на "Центр"
— ModusPwnens

106

Використовуйте рядок:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Це має зосереджувати вміст (по горизонталі).

А якщо ви також хочете встановити текст всередині етикетки до центру, скористайтеся:

[labelOne setTextAlignment:UITextAlignmentCenter];

Якщо ви хочете використовувати IB, у мене є невеликий приклад, який пов’язаний у XCode 4, але повинен надати достатньо деталей (також пам’ятайте, що поверх екрана властивостей він показує вкладку властивостей. Ці самі вкладки можна знайти в XCode 3.x): введіть тут опис зображення


1
дякую ... але я не хочу встановлювати це через ІБ. :( це мій останній варіант робити це ...
— Inder Kumar Rathore

1
@Inder Kumar Rathore: Немає проблем. Щоб встановити його в IB, слід натиснути на мітку, потім в інспекторі атрибутів встановити «Вирівнювання» на «Центр». У моєму IB (XCode 4) є 3 піктограми, що показують вирівнювання тексту. Очевидно, ви повинні вибрати середній тоді.
— Joetjah

Ви можете, будь ласка, надіслати мені знімок екрана ... Це мітка кнопки чи ви перетянули UILabel з бібліотеки ??? Я припускаю, що це кнопка UILabel not button
— Inder Kumar Rathore

@Inder Kumar Rathore: Гей, перегляньте скріншот, який я додав. Я дійсно помилявся з типом міток, якими ви користуєтесь, я все ще думав про UILabel замість тексту в UIButton. На скріншоті показано, як вирівняти UIButton через IB.
— Joetjah

1
Мені не дозволено редагувати, але NSTextAlignmentCenter замінив UITextAlignmentCenter. Вони означають точно те саме, що тхо. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
— OC Rickard

90

Рішення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 буде "Актуальним" (що може зайняти кілька секунд):

Порівняння кнопки, призначеної для призначення та за замовчуванням, у програмі Interface Builder



Рішення2

Якщо ви хочете написати код, виконайте довгий процес

1.Створити IBOutletдля кнопки
2.Записати код у viewDidLoad

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


Рішення3

У новій версії Xcode (шахта Xcode 6.1) ми маємо властивість віднести назву
Select , а Attributedпотім вибрати опцію текст і натисніть центральну нижче

PS Текст не вийшов багаторядковим, для цього я повинен встановити

btn.titleLabel.numberOfLines = 0

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


Для рішення 3 ви можете просто додати Line Breaking = Clip, він перетворить текст у багаторядковий
— фін

Рішення 3 має проблеми, принаймні, з Xcode 11.3.1: коли я змінюю назву кнопки, вона не працює. коли я використовував btn.titleLabel.textAlignment, це чудово працює.
— Брайан Гонг

27

Для UIButton слід використовувати: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];


13

Для тих із вас, хто зараз використовує iOS 6 або новішої версії, UITextAlignmentCenter припинено. Зараз це NSTextAlignmentCenter

ПРИКЛАД: mylabel.textAlignment = NSTextAlignmentCenter;Відмінно працює.


12

Для швидкого 4, xcode 9

myButton.contentHorizontalAlignment = .center

Я встановив myButton.titleLabel? .NumberOfLines = 0, і це спричинило мітку в межах кнопки до центру, тому я намагався зрозуміти, як вирівняти текст ліворуч у межах кнопки, і це спрацювало, встановивши його.
— maxcodes

7

Якщо припустити, що btn посилається на UIButton, щоб змінити багаторядковий підпис, який буде по центру горизонтально, ви можете використовувати наступне твердження в iOS 6 або пізнішій версії:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;

4

UITextAlignmentCenter застаріло в iOS6

Натомість ви можете використовувати цей код:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;


Немає властивості для текстового вирівнювання виклику UIButton.
— Раві

У iOS такої власності немає для
— iIButton

Він має на увазі button.titleLabel.textAlignment
— OC Rickard



3

Насправді ви можете це зробити в інтерфейсі.

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


Якщо його приписують, ми не можемо встановити кольоровий текст, шрифт тощо через Storyboard.
— Vineesh TP

3

Спробуйте так:

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

2

Це можна зробити з раскадровки. Виберіть кнопку. Встановіть перерву рядка "Обертання слів", встановіть для заголовка "Звичайний" значення "Приписане". Виберіть "Вирівнювання по центру". Ця частина важлива => Кнопка ... (Детальніше). І виберіть режим розриву рядка на "Обертання символів".


1

UIButton не підтримує setTextAlignment. Тому вам потрібно перейти з setContentHorizontalAlignment для вирівнювання тексту кнопки

Для довідки

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.