Як зробити центр вирівнювання тексту 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.