Как установить заголовок 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

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

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


Это очень помогло мне, не могу поверить, что я не поняла, для чего были эти средства управления.
Итан Паркер

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

в xcode 8.2.1 он переместился в другое место, смотрите мой ответ ниже
dang

Как сделать это программно в Swift? Я хочу выровнять изображение справа и заголовок слева ???
Визаль Самбо


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


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 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
Это сработало для меня, contentHorizontAlignment - нет, спасибо.
Дэнфордхэм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.