2013-10-10 15 views
8

Ho riscontrato un problema che finora non riesco a trovare una soluzione. Sto aggiungendo una nuova funzionalità alla mia app e desidero aggiungere un secondo UIBarButtonItem sul lato sinistro della mia UINavigationBar. Per qualche ragione iOS 7 prende questo come pulsante1, grandCanyon, button2. Non riesco a trovare alcun modo per rimuovere la ridicola spaziatura tra questi due pulsanti, che sta anche causando il mio titolo di essere fuori allineamento. Qualcuno può aiutare !? C'è una soluzione a questo!?iOS 7 UIBarButtonItem problema di spaziatura ridicolo

enter image description here

Codice:

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

Mostra il codice per l'impostazione dei pulsanti. – rmaddy

+0

Inserisci il codice nella tua domanda in modo che le persone possano leggerlo. – rmaddy

+0

Oops, done. Non ho capito che potevo modificare il post, mi dispiace. – KelticKoder

risposta

4

Pensate Sono riuscito a risolvere il problema utilizzando un la visualizzazione personalizzata come mostrato di seguito non è perfetta (la selezione attenua i pulsanti più scuri anziché chiari, ad esempio) ma cercherò di risolverlo domani. Sono contento che il mio mal di testa sia finito! Grazie per il tuo aiuto, mi ha portato ad alcuni nuovi approcci che non ho provato.

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

Grazie mille per questo. Oggi mi sono imbattuto in questo stesso numero e l'ho risolto usando la tua risposta. – Isuru

+0

Sembra che in iOS 7 si diffonda anche UIBarButtonItems in una UIToolbar. Ho impostato il mio pulsante, etichetta, pulsante, etichetta, spazio flessibile ed è mostrato come pulsante, etichetta, flessibile, pulsante, etichetta – zambono

2

Ci può essere un modo migliore, ma per correggere i problemi di spaziatura sulle voci della barra del tasto su iOS 7, ho sottoclasse UINavigationBar e sovrascritto il metodo layoutSubviews. Qui puoi spostare ciascun elemento del pulsante della barra ovunque tu voglia.

Per fare un esempio:

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

In realtà, come ho guardato il mio codice, stavo usando UIBarButtonItems con visualizzazioni personalizzate. Quindi sono stato in grado di spostare la posizione della vista personalizzata.

avrete probabilmente bisogno di un ciclo tra i subviews del UINavigationBar per spostarli se si sta usando solo UIBarButtonItems con le immagini in questo modo:

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

Hai un esempio di ciò che hai cambiato in drawRect :, non sono sicuro di come andrei su questo. – KelticKoder

+0

Sicuro un secondo, aggiornerò la mia risposta –

+0

aggiornata. Anche la cosa buona che hai chiesto, avevo sbagliato e il metodo layoutSubviews, non drawRect. –

Problemi correlati