Как установить заголовок 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];
Мадан Мохан
источник

Ответы:

1569

Установите contentHorizontAlignment:

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
Имейте в виду, что вы также можете установить оба эти свойства из Интерфейсного Разработчика.
Михай Дамиан
1
так что это был номер 9000 от меня, спасибо, полезный ответ
логика
6
Нам лень искать документацию. Что бы мы делали без ТАК!
Кедар Паранджапе
3
Показывает, что SO лучше задокументировано, чем документ Apple.
GeneCode 13.10.16
1
UIControlContentHorizontalAlignmentLeadingи UIControlContentHorizontalAlignmentTrailingбыли добавлены в iOS 11
Cal Stephens
118

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

UIButton в IB

Не забывайте, что вы также можете выровнять изображение в кнопке.

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

n8tr
источник
Это очень помогло мне, не могу поверить, что я не поняла, для чего были эти средства управления.
Итан Паркер
Спасибо, это помогло мне. Я не смог найти края вставок для заголовка кнопки без помощи стрелок на ваших образцах фотографий.
Ашок
в xcode 8.2.1 он переместился в другое место, смотрите мой ответ ниже
dang
Как сделать это программно в Swift? Я хочу выровнять изображение справа и заголовок слева ???
Визаль Самбо
36

В Swift 3+:

button.contentHorizontalAlignment = .left
Винсент
источник
13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
bhavik
источник
13

Свифт 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Мухаммед Зайд Патан
источник
9

Использование emailBtn.titleEdgeInsetsлучше, чем contentEdgeInsets, если вы не хотите менять всю позицию содержимого внутри кнопки.

Габриель
источник
7

в xcode 8.2.1 в конструкторе интерфейсов он перемещается в:введите описание изображения здесь

Данг
источник
5

В коде @DyingCactus есть небольшая ошибка. Вот правильное решение, чтобы добавить UILabel в UIButton, чтобы выровнять текст кнопки, чтобы лучше контролировать заголовок кнопки:

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];

Надеюсь это поможет....

Al

Аль-Нур Ладхани
источник
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
IOS
источник
1

Пытаться

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
Gev
источник
1
Это сработало для меня, contentHorizontAlignment - нет, спасибо.
Дэнфордхэм