Domanda

Probabilmente sto facendo qualcosa di sbagliato qui, perché questo sembra un po 'stupido.
Sono la creazione di un titleView personalizzato (nella forma di un UILabel) sul mio UINavigationController che è lo stesso in ogni pagina. Per facilitare questo, ho creato una funzione in un mio delegato app per visualizzare correttamente l'etichetta. Ho poi chiamare questa funzione su qualsiasi subviews subito dopo ho spingerlo verso la pila di navigazione.
Ecco il codice (che probabilmente ha più senso di mia spiegazione):

//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
    UILabel *label = [[UILabel alloc] init];
    // set up label attributes
    // ...
    [label sizeToFit]; //without this line my label won't show at all
    [navController.navigationBar.topItem setTitleView:label];
    [label release];
}

// In SomeViewController.m, when pushing another controller onto the stack:
    UIViewController *otherViewController = //initialize other view controller;
    [self.navigationController pushViewController:otherViewController animated:YES];
    [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];

Il mio problema è che quando spingo vista successiva controllore nello stack, e le nuove diapositive controllore attraverso uniformemente, per tutta la durata dell'animazione bastoni etichetta in alto a sinistra prima infine scattare in posizione dopo l'animazione è finita . Sembra davvero strano e brutto. Come posso configurare l'etichetta correttamente in modo che scivola dalla visualizzazione successiva senza problemi? Sicuramente si tratta di qualcosa di semplice che mi manca ...

È stato utile?

Soluzione 2

Quello che ho finito per fare stava utilizzando un'immagine con il testo incluso come backround per l'intestazione, quindi piuttosto che l'animazione liscio come avrei voluto in origine, non è l'animazione a tutti.
Considerando che è la stessa voce in tutto il mondo, non è un grosso problema però.

Altri suggerimenti

Una risposta molto tardi a questa domanda, ma ho appena incontrato lo stesso problema e ha trovato un altro modo per risolverlo, senza l'utilizzo di un'immagine. Ho pensato di condividere la mia soluzione in quanto potrebbe aiutare qualcuno.

Nel mio caso sto impostando un UILabel personalizzato di essere il titleview, e mi sono reso conto che solo quando ho impostato la proprietà titleview nel metodo viewDidLoad, si anima in modo corretto. In alcuni casi, tuttavia, non ho capito il titolo ancora nel mio viewDidLoad (in alcuni casi ho avuto bisogno di usare un titolo da una richiesta HTTP per esempio). Quindi, la mia soluzione per i casi è stato quello di impostare la proprietà titleview alla mia customLabel con testo @"" in viewDidLoad, e ogni volta che ho avuto il titolo vero e proprio ho cambiato solo la proprietà testo della mia etichetta personalizzata.

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.

   //set temporary title, the MBMUINavigationBarTitleView is a UIView subclass whose  viewWithTitle method returns an autoreleased UIlabel with my custom settings, custom font etc.
   self.navigationItem.titleView = [MBMUINavigationBarTitleView viewWithTitle:@" "];
}

//somewhere later, when I have the real title
UILabel* titleLabel = (UILabel*)self.navigationItem.titleView;
[titleLabel setText:theRealTitle];

mi trovavo in una situazione simile a Ylva, utilizzando un'istanza di una classe di testo personalizzato per la proprietà UINavigationItem's titleView. Tuttavia, ho trovato la configurazione in viewDidLoad non risolve il problema tecnico di animazione.

La mia soluzione al problema è stato quello di attendere che il controller della vista in questione era stato estratto dallo stack del controller di navigazione, ea quel punto togliere la UINavigationItem's titleView personalizzato in modo che non ha bisogno di ottenere animato a tutti.

Quando il mio UINavigationController sottoclasse riceve il messaggio popViewControllerAnimated:, ho copiare il testo del titolo dal mio campo di testo personalizzato (UINavigationItem's titleView) nella proprietà UINavigationItem's title e impostare la proprietà titleView a zero. Poi il UINavigationController va avanti e salta fuori il controller della vista e solo l'etichetta del titolo barra di navigazione di serie è animata (non il mio titolo personalizzato), problema tecnico gratuito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top