Чи можна відрегулювати х, у положення для titleLabel UIButton?


121

Чи можна відрегулювати положення x, y для точки titleLabela UIButton?

Ось мій код:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];     
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.titleLabel.frame = ???

1
Виберіть іншу відповідь, щоб ми могли видалити дуже негативну. Або ж поясніть, чому ви це зробили.
tchrist

1
Чому ця відповідь не прийнята?
Антоніо МГ

Це все , що вам потрібно stackoverflow.com/questions/18484747/uibutton-titleedgeinsets

Відповіді:


445
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];

І в Свіфта

//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top

//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)

Швидкий 5

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.titleEdgeInsets = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 0.0, right: 0.0)

3
це, безумовно, найкраща відповідь
greenisus

3
Цікаво, чому запитувач обрав іншу відповідь. Цей набагато кращий.
Джошуа

4
Перші два рядки мені навіть не знадобилися ... setTitleEdgeInsets:було все, що я вважав за потрібне перенести текст.
ArtOfWarfare

Це, безумовно, правильно, але, ймовірно, простіше здійснити за допомогою конструктора інтерфейсів (як описано у моїй відповіді).
eladleb

Перші два рядки розміщують ваш текст на рівні 0,0 (x, y). Це може запобігти відносне позиціонування; особливо якщо встановити вирівнювання за замовчуванням у xib.
Джарретт Барнетт

40

Найпростіший спосіб зробити це візуально - використовувати інспектор атрибутів ** (з'являється під час редагування xib / раскадровки), встановивши властивість " edge " на заголовок, налаштувавши вставки, потім встановивши властивість "edge" для зображення та налаштувавши відповідно . Зазвичай це краще, ніж кодувати його, оскільки це простіше в обслуговуванні та дуже візуально.

Налаштування інспектора


1
Хороший рада для зміни Edgeдо Titleі потім налаштувати вставку!
Дін

Для подальшої довідки, оскільки Xcode 8 замість параметра edgeвластивості ви можете налаштувати заголовкові вставки у розмірі інспектора.
dbmrq

14

Отримайте від UIButton та реалізуйте наступний метод:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

Редагувати:

@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end

@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
  contentRect.origin = titleOrigin;
  return contentRect;
}
@end

Спасибі, це те, що я насправді потребував. Автоматичного центрування було недостатньо.
dmzza

4

Для своїх проектів у мене є ця утиліта розширення:

extension UIButton {

    func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
        self.titleEdgeInsets.left += hOffset
        self.titleEdgeInsets.top += vOffset
    }

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