2010-05-11 14 views
108

Ecco il mio codiceè possibile regolare la posizione x, y titleLabel di 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

Scegliere l'altra risposta in modo che possiamo eliminare quello molto negativo. Oppure spiega perché l'hai fatto. – tchrist

+1

Perché questa risposta non è accettata? –

+0

Questo è tutto ciò che serve http://stackoverflow.com/questions/18484747/uibutton-titleedgeinsets –

risposta

14

Derive da UIButton e implementare il seguente metodo:

- (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

puoi mostrarmi qualche esempio per favore? – RAGOpoR

+0

Grazie, questo è quello di cui avevo effettivamente bisogno. Il centraggio automatico non era abbastanza. – 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)]; 

E a 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

questa è sicuramente la migliore risposta – greenisus

+3

Mi chiedo perché il richiedente abbia scelto l'altra risposta. Questo è molto meglio. – Joshua

+4

Non avevo nemmeno bisogno delle prime due righe ... 'setTitleEdgeInsets:' tutto ciò che ho trovato necessario per spostare il testo. – ArtOfWarfare

36

Il metodo più semplice modo per farlo visivamente è quello di utilizzare la finestra di ispezione attributo ** (appare quando si modifica un xib/storyboard), l'impostazione del "bordo" proprietà al titolo, la regolazione è inserti, poi impostando la proprietà "edge" per l'immagine e regolando di conseguenza. Di solito è meglio che programmarlo, poiché è più semplice da mantenere e altamente visivo.

Attribute inspector setting

+1

Buon consiglio a cambia 'Bordo' in' Titolo' e poi aggiusta inserto! – Dean

Problemi correlati