2013-09-21 13 views
11

Per qualche motivo il pulsante destro nella barra di navigazione è 16px da destra. Mi piacerebbe ridurre il margine. Qual è il modo corretto per farlo?navigationItem.rightBarButtonItem margin in iOS7

self.btnDone = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *btnImgDone = [UIImage imageNamed:@"btn_small_default.png"]; 
self.btnDone.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:15.0]; 
[self.btnDone setTitle:@"Done" forState:UIControlStateNormal]; 
[self.btnDone setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
[self.btnDone setTitleShadowColor:[UIColor colorWithWhite:0 alpha:.2f] forState:UIControlStateNormal]; 
self.btnDone.titleLabel.shadowOffset = (CGSize){0,-1}; 
[self.btnDone setBackgroundImage:btnImgDone forState:UIControlStateNormal]; 
[self.btnDone setBackgroundImage:[UIImage imageNamed:@"btn_small_active.png"] forState:UIControlStateHighlighted]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.btnDone]; 

enter image description here

+0

Hai trovato una risposta nel frattempo? –

risposta

8

Ho avuto lo stesso problema e l'unico modo che ho trovato per risolvere il problema è stato quello di utilizzare il setImageEdgeInsets:.

Se si desidera spostare il pulsante a destra (ad esempio: 5 punti o 10 px), aggiungere la seguente riga alla dichiarazione tasto:

UIEdgeInsets buttonEdges = UIEdgeInsetsMake(0, 5, 0, -5); 
[self.btnDone setImageEdgeInsets:buttonEdges]; 

Se si desidera supportare iOS6 e iOS7 voi può fare questo:

CGFloat xOffset; 

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) 
{ 
    // for ios7 
    xOffset = 5.0f; 
} 
else 
{ 
    // ios6 
    xOffset = 2.0f; 
} 

UIEdgeInsets buttonEdges = UIEdgeInsetsMake(0, xOffset, 0, - xOffset); 
[self.btnDone setImageEdgeInsets:buttonEdges]; 

Spero che aiuti!

+0

Ma funzionerebbe se utilizzo un'immagine background per il pulsante? Perché lo sfondo sarà schiacciato. –

+0

Errore mio, non ho visto che stavi usando 'setBackgroundImage: forState:', 'setImageEdgeInsets:' funziona per me ma sto usando 'setImage: forState:' (non lo spreme però). –

6

tenta di mettere uno spazio fisso dopo che il tasto:

// Fixed space 
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixedSpace setWidth:20.0]; 

self.navigationItem.rightBarButtonItems = @[fixedSpace, yourButton]; 

L'intero codice che ho usato è:

// Bar button 
UIButton *loadButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 15, 34)]; 
VVdLoadImage *loadImage = [[VVdLoadImage alloc] initWithFrame:CGRectMake(0, 0, 15, 34)]; 
loadImage.backgroundColor = [UIColor clearColor]; 
loadImage.userInteractionEnabled = NO; 
[loadButton addSubview:loadImage]; 

[loadButton addTarget:self action:@selector(loadCards) forControlEvents:UIControlEventTouchDown]; 
UIBarButtonItem *loadBarButton = [[UIBarButtonItem alloc] initWithCustomView:loadButton]; 

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixedSpace setWidth:20.0]; 

self.navigationItem.rightBarButtonItems = @[fixedSpace, loadButton]; 
+0

L'ho provato, ma il risultato è stato solo meno spazio per il mio pulsante. Il margine a destra è rimasto. –

+0

L'ho testato di nuovo con valori diversi di setWidth e funziona per me. – RFG

+0

Funziona quando uso un UIButton senza un'immagine di sfondo. I tuoi hanno un'immagine di sfondo e il testo del titolo del pulsante? –

0

Se non è ancora possibile farlo funzionare, per qualche ragione questo ha funzionato per me. someButton è l'UIButton che ho aggiunto come customView del mio UIBarButtonItem

someButton.contentEdgeInsets = (UIEdgeInsets){.right=-20}; 
1

Vedere il mio.

func addLogOutButtonToNavigationBar(triggerToMethodName: String) 
{ 
    let button: UIButton = UIButton() 
    button.setImage(UIImage(named: "logOff.png"), forState: .Normal) 
    button.frame = CGRectMake(20, 0, 30, 25) 
    button.contentEdgeInsets = UIEdgeInsets.init(top: 0, left: 10, bottom: 0, right: -10) 

    button .addTarget(self, action:Selector(triggerToMethodName), forControlEvents: UIControlEvents.TouchUpInside) 
    let rightItem:UIBarButtonItem = UIBarButtonItem() 
    rightItem.customView = button 
    self.navigationItem.rightBarButtonItem = rightItem 
}