2013-09-21 16 views
11

Aus irgendeinem Grund ist der rechte Knopf in der Navigationsleiste 16px von rechts. Ich möchte den Rand kleiner machen. Was ist der richtige Weg, das zu tun?navigationItem.rightBarButtonItem Rand 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

Haben Sie in der Zwischenzeit eine Antwort gefunden? –

Antwort

8

hatte ich das gleiche Problem und die einzige Art, wie ich es zu beheben gefunden war die setImageEdgeInsets: zu verwenden.

Wenn Sie möchten, dass Ihre Schaltfläche rechts (zum Beispiel: 5 Punkte oder 10 px) verschieben, fügen Sie die folgende Zeile in die Schaltfläche Erklärung:

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

Wenn Sie möchten, um Sie unterstützen iOS6 und iOS7 kann das tun:

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]; 

Hoffe es hilft!

+0

Aber würde das funktionieren, wenn ich eine backgroundImage für die Schaltfläche verwende? Weil der Hintergrund gequetscht wird. –

+0

Mein Fehler, ich habe nicht gesehen, dass Sie die 'setBackgroundImage: forState:', 'setImageEdgeInsets:' funktioniert für mich, aber ich benutze die 'setImage: forState:' (es quetscht es nicht). –

6

Versuche einen festen Platz nach dieser Taste zu setzen:

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

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

Der gesamte Code, den ich verwendet habe, ist:

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

Ich habe das versucht, aber das Ergebnis war nur wenig Platz für meinen Button. Marge auf der rechten Seite blieb. –

+0

Ich habe es wieder mit verschiedenen Werten von setWidth getestet und es funktioniert für mich. – RFG

+0

Es funktioniert, wenn ich eine UIButton ohne ein Hintergrundbild verwenden. Hatte Ihr ein Hintergrundbild und einen Tastentitel? –

0

Wenn Sie immer noch nicht daran zu arbeiten, aus irgendeinem Grunde Das hat für mich funktioniert. someButton ist die UIButton, die ich als Custom meiner UIBarButtonItem hinzugefügt haben

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

See Mine.

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 
}