Як встановити заголовок UIButton як вирівнювання ліворуч?


472

Мені потрібно відобразити електронну адресу з лівого боку UIButton, але вона розташована в центрі.

Чи є спосіб встановити вирівнювання вліво від а UIButton?

Це мій поточний код:

UIButton* emailBtn = [[UIButton alloc] initWithFrame:CGRectMake(5,30,250,height+15)];
emailBtn.backgroundColor = [UIColor clearColor];
[emailBtn setTitle:obj2.customerEmail forState:UIControlStateNormal];
emailBtn.titleLabel.font = [UIFont systemFontOfSize:12.5];
[emailBtn setTitleColor:[[[UIColor alloc]initWithRed:0.121 green:0.472 blue:0.823 alpha:1]autorelease] forState:UIControlStateNormal];
[emailBtn addTarget:self action:@selector(emailAction:) forControlEvents:UIControlEventTouchUpInside];
[elementView addSubview:emailBtn];
[emailBtn release];

Відповіді:


1567

Встановити contentHorizontalAlignment:

emailBtn.contentHorizontalAlignment = .left;

Ви також можете налаштувати вміст лівої вставки, інакше текст торкнеться лівої межі:

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

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);

44
Майте на увазі, що обидва ці властивості ви також можете встановити з Interface Builder.
Михай Даміан

1
тож це було мені номер 9000, ніж подяка, корисна відповідь
Логіка

6
Ми лінуємося шукати документацію. Що б ми зробили без ТАК!
Кедар Паранджапе

3
Показує SO краще задокументовано, ніж документ Apple.
GeneCode

1
UIControlContentHorizontalAlignmentLeadingі UIControlContentHorizontalAlignmentTrailingбули додані в iOS 11
Cal Stephens

118

Ви також можете використовувати конструктор інтерфейсів, якщо ви не хочете вносити корективи в код. Тут я залишив вирівняти текст, а також вставте його:

UIButton в IB

Не забувайте, що ви також можете вирівняти зображення за допомогою кнопки.

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


Це допомогло мені багато тонн, не можу повірити, що я не усвідомлював, що саме для цього контролю.
Етан Паркер

Спасибі, мені це допомогло. Мені не вдалося дізнатися крайові вставки для заголовка кнопки без допомоги вказівки стрілки на ваших зразках.
Ашок

в xcode 8.2.1 він перемістився в інше місце, дивіться мою відповідь нижче
dang

Як це швидко зробити програмно? Я хочу вирівняти зображення праворуч, а заголовок ліворуч ???
Visal Sambo


13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

13

Швидкий 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

9

Використовувати emailBtn.titleEdgeInsetsкраще contentEdgeInsets, якщо ви не хочете змінювати всю позицію вмісту всередині кнопки.




5

У коді @DyingCactus є невелика помилка. Ось правильне рішення додати UILabel до UIButton, щоб вирівняти текст кнопки для кращого керування кнопкою 'title':

NSString *myLabelText = @"Hello World";
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];

// position in the parent view and set the size of the button
myButton.frame = CGRectMake(myX, myY, myWidth, myHeight); 

CGRect myButtonRect = myButton.bounds;
UILabel *myLabel = [[UILabel alloc] initWithFrame: myButtonRect];   
myLabel.text = myLabelText;
myLabel.backgroundColor = [UIColor clearColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentLeft;

[myButton addSubview:myLabel];
[myLabel release];

Сподіваюсь, це допомагає ....

Ал


2

Для Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Це може допомогти, якщо хтось потребує.


2

У Swift 5.0 та Xcode 10.2

У вас є два способи підходу

1) Прямий підхід

btn.contentHorizontalAlignment = .left

2) Приклад SharedClass (написати один раз і використовувати кожен посуд)

Це ваш загальний клас (наприклад, ви отримуєте доступ до всіх властивостей компонентів)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

//UIButton extension
extension UIButton {
    func btnProperties() {
        contentHorizontalAlignment = .left
    }
}

У вашому дзвінку ViewController таким чином

button.btnProperties()//This is your button

1

Спробуйте

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
Це працювало для мене, contentHorizontalAlignment не став, дякую.
данфорд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.