2014-10-25 5 views
5

Sono stato in grado di modificare la posizione verticale dell'icona del pulsante Indietro ma non il testo.Cambia la posizione verticale del testo del pulsante Indietro in UINavigationBar

che sto utilizzando il metodo layoutSubviews in UINavigationBar:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    BOOL fixed = NO; 
    NSArray *classNamesToReposition = @[@"_UINavigationBarBackIndicatorView", @"UINavigationButton", @"UINavigationItemButtonView"]; 
    for (UIView *view in [self subviews]) { 
     if ([classNamesToReposition containsObject:NSStringFromClass([view class])] && !fixed) { 
      CGRect frame = [view frame]; 
      if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) { 
       frame.origin.y = 14.5; 
      } else if ([NSStringFromClass([view class]) isEqualToString:@"UINavigationButton"]) { 
       frame.origin.y = 9.0; 
      } else if ([NSStringFromClass([view class]) isEqualToString:@"UINavigationItemButtonView"]) { 
       frame.origin.y = 5.0; 
      } 
      [view setFrame:frame]; 
     } 
    } 
} 

Il problema è che ogni modifica fotogramma che faccio sul UINavigationItemButtonView non sembra avere alcun effetto, né alcun cambiamento cornice faccio su di esso è UILabel visualizzazione secondaria questo è il vero testo del pulsante. Quando registro le viste, i fotogrammi sembrano cambiare ma il testo non si muove nella mia vista. Che cosa sto facendo di sbagliato?

+0

Jack, hai provato a mettere quel codice in 'viewDidAppear:' invece? Ho testato un mio progetto e imposta la posizione y. – carlodurso

risposta

4

Sottoclassi una UINavigationBar denominata MyNavigationBar, in layoutSubview, modifica la posizione dell'indicatore posteriore.

for (UIView *view in [self subviews]) { 
    CGRect frame = [view frame]; 
    if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) { 
     frame.origin.y = 19.5; //default is 11.5, move down by 8. 
    } 
    [view setFrame:frame]; 
} 

E si può cambiare la posizione del titolo del backBarItem aggiungendo questo in applicationDidFinished.

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, 8) forBarMetrics:UIBarMetricsDefault]; 
+0

Questi blocchi di codice si escludono a vicenda; puoi impostare la posizione usando [UIBarButtonItem appearanceWhenContainedIn ...] da solo, o hai bisogno di iterare anche attraverso le viste? –

+0

No, devo aggiungere entrambi, il primo è quello di cambiare l'indicatore posteriore (la freccia indietro), il secondo è quello di cambiare il titolo di backbarItem, ecco un [esempio] (https: //www.dropbox .com/s/uh0d7f258diynrs/VeticalPosition.zip? dl = 0) nel caso in cui si desideri vedere come funziona. – gabbler

+0

Questo è il grande, ma sfortunatamente questo scollega il testo dalla freccia indietro rendendo self.navigationItem.hidesBackButton = YES; sfortunatamente si nasconde solo la freccia indietro. Hai trovato una soluzione a questo dilemma? –