2013-10-10 18 views
8

Ich habe ein Problem, dass ich bis jetzt keine Lösung finden kann. Ich füge meiner App ein neues Feature hinzu und möchte ein zweites UIBarButtonItem auf der linken Seite meiner UINavigationBar hinzufügen. Aus irgendeinem Grund nimmt iOS 7 dies als Button1, GrandCanyon, Button2. Ich finde keinen Weg, um den lächerlichen Abstand zwischen diesen beiden Knöpfen zu entfernen, was auch dazu führt, dass mein Titel nicht mehr richtig ausgerichtet ist. Kann jemand helfen!? Gibt es dafür eine Lösung?iOS 7 UIBarButtonItem lächerlich Abstand Problem

enter image description here

Code:

UIBarButtonItem *firstButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"firstButton"] style:UIBarButtonItemStylePlain target:self action:@selector(showSettings)]; 
UIBarButtonItem *secondButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"secondButton"] style:UIBarButtonItemStylePlain target:self action:@selector(showAttachments)]; 
[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:firstButton, secondButton, nil]]; 
+0

Zeigen Sie Ihren Code zum Einrichten der Schaltflächen an. – rmaddy

+0

Geben Sie den Code in Ihre Frage ein, damit die Leute ihn lesen können. – rmaddy

+0

Ups, fertig. Ich wusste nicht, dass ich den Beitrag bearbeiten konnte, sorry. – KelticKoder

Antwort

4

denke, ich habe es geschafft, das Problem zu klären, eine mit benutzerdefinierte Ansicht wie unten gezeigt, ist es nicht perfekt (Auswahl dimmt die Tasten dunkler statt leichter zum Beispiel) aber ich werde versuchen, das morgen zu beheben. Nur froh, dass meine Kopfschmerzen vorbei sind! Danke für deine Hilfe, es führte mich zu ein paar neuen Ansätzen, die ich nicht versuchte.

UIImage *firstButtonImage = [UIImage imageNamed:@"firstButton"]; 
firstButtonImage = [firstButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

UIButton *firstButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[firstButton setImage:firstButtonImage forState:UIControlStateNormal]; 
[firstButton addTarget:self action:@selector(firstButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 

UIImage *secondButtonImage = [UIImage imageNamed:@"secondButton"]; 
secondButtonImage = [secondButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

UIButton *secondButton = [[UIButton alloc] initWithFrame:CGRectMake(45, 0, 35, 35)]; 
[secondButton setImage:secondButtonImage forState:UIControlStateNormal]; 
[secondButton addTarget:self action:@selector(secondButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 

UIView *leftBarItemsView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)]; 
[leftBarItemsView addSubview:firstButton]; 
[leftBarItemsView addSubview:secondButton]; 

UIBarButtonItem *leftBarItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarItemsView]; 

[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObject:leftBarItem]]; 
+1

Vielen Dank dafür. Ich bin heute auf dasselbe Problem gestoßen und habe es mit Ihrer Antwort gelöst. – Isuru

+0

Es scheint, dass es in iOS 7 auch UIBarButtonItems in einer UIToolbar verteilt. Ich habe meinen Button, Label, Button, Label, flexiblen Platz, und es wird als Button, Label, flexible, Button, Label angezeigt – zambono

2

Es kann eine bessere Art und Weise, aber Abstand Probleme auf Bar-Taste Elemente auf iOS 7 zu korrigieren, ich habe die layoutSubviews Methode subclassed UINavigationBar und außer Kraft gesetzt. Dort können Sie jeden Bar-Button-Eintrag verschieben, wo immer Sie möchten.

Als Beispiel:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // If iOS 7, fix the bar button positions 
    BOOL isIOS7 = [[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending; 
    if (isIOS7) 
    { 
     for (UIBarButtonItem *item in self.topItem.leftBarButtonItems) 
     { 
      // Reposition the customView property 
     } 

     for (UIBarButtonItem *item in self.topItem.rightBarButtonItems) 
     { 
      // Reposition the customView property 
     } 
    } 
} 

Eigentlich, wie ich meinen Code sah, war ich mit UIBarButtonItems mit benutzerdefinierten Ansichten. So konnte ich die benutzerdefinierte Ansichtsposition verschieben.

Sie müssen wahrscheinlich eine Schleife durch die Subviews der UINavigationBar sie bewegen, wenn Sie nur UIBarButtonItems mit ähnlichen Bildern mit:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // If iOS 7, fix the bar button positions 
    BOOL isIOS7 = [[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending; 
    if (isIOS7) 
    { 
     for (UIView *subview in self.subviews) 
     { 
      // Reposition as needed 
     }  
    } 
} 
+0

Haben Sie ein Beispiel dafür, was Sie in drawRect geändert haben: nicht sicher, wie ich das machen würde. – KelticKoder

+0

Sicher eine Sekunde, ich werde meine Antwort aktualisieren –

+0

Aktualisiert. Auch gute Sache, die Sie gefragt haben, ich habe mich geärgert und es ist die layoutSubviews Methode, nicht drawRect. –

Verwandte Themen