2014-11-24 6 views
6

enter image description herenavigationItem setRightBarButtonItems Abstand zu breit

Ich versuche, den Abstand zwischen diesen beiden bar Taste, um Elemente zu verringern.

Ich verwende

navigationItem setRightBarButtonItems 

die beiden Tasten, um Elemente gesetzt, aber sie sind weit voneinander entfernt zu.

Ich habe versucht, negativen Raum hinzuzufügen, ich habe versucht, einen Abstandhalter nach ihm, festen Platz, flexiblen Raum hinzuzufügen. In den Dokumenten wird nichts angezeigt, das besagt, dass Sie den Abstand nicht ändern können, aber ich kann nicht finden, wie.

Vielen Dank für die Hilfe im Voraus.

EDIT NACH ANTWORT:

Siu Chung Chan Antwort war genau richtig, aber da ich nicht ganz auf den ersten bekommen habe dachte ich, ich würde den Code teilen, die mich erkennen, dass er genau richtig war.

Wenn Sie dies alles in einem Block zu setzen waren, was seine (sehr korrekt) Antwort aussehen würde:

UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
UIButton *filterBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[filterBtn addTarget:self action:@selector(someMethod) forControlEvents:UIControlEventTouchUpInside]; 
[filterBtn setBackgroundImage:[UIImage imageNamed:@“someicon”] forState:UIControlStateNormal]; 
[filterBtnView addSubview:filterBtn]; 
UIBarButtonItem *btnFilter = [[UIBarButtonItem alloc] initWithCustomView:filterBtnView]; 

UIView *selectBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
UIButton *selectBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[selectBtn setBackgroundImage:[UIImage imageNamed:@“someothericon”] forState:UIControlStateNormal]; 
[selectBtn addTarget:self action:@selector(someOtherMethod:) forControlEvents:UIControlEventTouchUpInside]; 
[selectBtnView addSubview:selectBtn]; 
UIBarButtonItem *btnSelect = [[UIBarButtonItem alloc] initWithCustomView:selectBtnView]; 

[self.navigationItem setRightBarButtonItems:@[btnFilter, btnSelect] animated:YES]; 

Für mich ist das Schöne daran, dass es einen Blick gibt in wie einige der Ansichten von Apple tatsächlich so angelegt sind, dass sie voreingenommen dafür sind, wie sie diese nur verwenden wollen. Wenn Sie also stark angepasste Benutzeroberflächen erstellen möchten, müssen Sie viele UIView-Manipulationen durchführen, um ihre (vielleicht) unbeabsichtigten Barrieren zu umgehen.

Moral der Geschichte:. Wenn eine Ansicht Schlange ist nicht das Richtige für Sie den Blick von der UIView Level versuchen, neu zu erstellen und das Hinzufügen es dann zu der Ansicht, die Sie in es angezeigt werden soll

Thanks again Siu Chung Chan!

+2

die Bildgröße Breite Überprüfen Sie, ob es sehr groß ist. – gabbler

+0

Danke. Die Größe der Schaltfläche ist jedoch die Größe des Bildes, das ich in die Schaltfläche einfüge. Es ist also etwas anderes, das den Abstand bestimmt. – addzo

Antwort

3

Ich habe das schon mal gemacht.

Sie müssen Ihre eigene UIView für die Schaltfläche erstellen. Ursache der Standard-UIBARBACKITEM mit einigen Padding links und rechts.

ViewIconBtn* searchViewIconBtn = [[ViewIconBtn alloc] initWithImage:[UIImage imageNamed:@"searchIcon.png"]]; 
[searchViewIconBtn.btn addTarget:self action:@selector(toSearch) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem* btnSearch = [[UIBarButtonItem alloc] initWithCustomView:searchViewIconBtn]; 

UIBarButtonItem *space15 = [NegativeSpacer negativeSpacerWithWidth:15]; 
    [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:space15,btnWishList,btnPost,btnSearch, nil]]; 

btnWishList, btnPost, btnSearch sind sowohl die ViewIconBtn Klasse. In meinem Projekt habe ich 3 Nav-Tasten auf der rechten Seite erstellt.

Das UIBarButtonItem space15 wird verwendet, um das Padding zwischen der Grenze und dem am weitesten rechts liegenden Button anzupassen.

+0

Ok. Das macht Sinn für mich. Ist ViewIconBtn eine Unterklasse von UIButton? Oder ist eine direkte Unterklasse von UIView, der Sie UIButton-Elemente hinzugefügt haben? – addzo

+0

ya, habe ich ViewIconBtn ist eine uiview mit einer Schaltfläche –

+0

Interessant. Ich werde es ein wenig später versuchen. Danke für die schnelle Antwort! Ich schätze es! – addzo

0

Die von Ihnen bereitgestellte Lösung funktioniert hervorragend. Wenn Sie es vereinfachen möchten, können Sie die UIButton als benutzerdefinierte Ansicht direkt verwenden, ohne sie in eine UIView einzubetten.

fand ich, dass der Abstand zwischen meinem neuen Tasten eigentlich ein bisschen weniger als die Standard-Apfel Abstand ist so ich Ihr Beispiel mit dem in der UIView eingebettet UIButton verwendet, sondern verändert den Rahmen des UIView etwas größer zu sein.

UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 45, 35)]; 
0
- (void)addTwoRightBarButtonItems 
{ 
    UIButton *reloadBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    reloadBtn.frame = CGRectMake(0.0, 0.0, 45.0, 44.0); 
    [reloadBtn setImage:[UIImage imageNamed:@"reload_icon"] forState:UIControlStateNormal];men 
    reloadBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0); 
    // reloadBtn.backgroundColor = [UIColor redColor]; 

    UIButton *menuBtn = [UIButton buttonWithType:UIButtonTypeSystem]; 
    menuBtn.frame = CGRectMake(45.0, 0.0, 45.0, 44.0); 
    UIImage *image = [[UIImage imageNamed:@"menu_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    [menuBtn setImage:image forState:UIControlStateNormal]; 
    //menuBtn.backgroundColor = [UIColor greenColor]; 

    UILabel *badgeLbl = [[UILabel alloc]initWithFrame:CGRectMake(25, 8, 18, 18)]; 
    badgeLbl.layer.cornerRadius = 9; 
    [badgeLbl.layer setMasksToBounds:YES]; 
    badgeLbl.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:197.0/255.0 blue:0.0 alpha:1.0]; 
    badgeLbl.textColor = [UIColor colorWithRed:136.0/255.0 green:94.0/255.0 blue:16.0/255.0 alpha:1.0]; 
    badgeLbl.font = [UIFont fontWithName:@"Lato-Bold" size:9.f]; 
    badgeLbl.textAlignment = NSTextAlignmentCenter; 
    badgeLbl.hidden = YES; 
    [menuBtn addSubview:_lblBadge]; 

    UIBarButtonItem *offset = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
    offset.width = -10.0; 

    UIView *v = [[UIView alloc]initWithFrame:(CGRect){.size.width = 90.0,.size.height = 44.0}]; 
    [v addSubview:reloadBtn]; 
    [v addSubview:menuBtn]; 

    UIBarButtonItem *reloadItem = [[UIBarButtonItem alloc] initWithCustomView:v]; 

    [self.navigationItem setRightBarButtonItems:@[offset,reloadItem]]; // 
} 

enter image description here

Verwandte Themen