2010-05-11 1 views
108

вот мой кодМожно ли отрегулировать положение x, y titleLabel 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

Почему этот ответ не принят? –

+0

Это все, что вам нужно http://stackoverflow.com/questions/18484747/uibutton-titleedgeinsets –

ответ

14

Выведите из UIButton и реализовать следующий метод:

- (CGRect)titleRectForContentRect:(CGRect)contentRect; 

Edit:

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

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

Можете ли вы показать мне пример? – RAGOpoR

+0

Спасибо, это то, что мне действительно нужно. Автоматического центрирования было недостаточно. – dmzza

423
//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)]; 

И Swift

//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) 
+3

это, безусловно, лучший ответ – greenisus

+3

Интересно, почему ответчик выбрал другой ответ. Это намного лучше. – Joshua

+4

Мне даже не нужны первые две строки ... 'setTitleEdgeInsets:' было все, что мне было необходимо, чтобы сдвинуть текст. – ArtOfWarfare

36

Самый простой способ сделать это визуально является использование инспектора атрибутов ** (появляется при редактировании XIb/раскадровки), установив «край» свойство заголовка, регулируя его врезки, то устанавливая свойство «edge» для изображения и соответствующим образом регулируя. Обычно это лучше, чем его кодирование, поскольку его легче поддерживать и визуально.

Attribute inspector setting

+1

Хороший совет для измените 'Edge' на' Title', а затем отредактируйте вставку! – Dean