Pregunta

Probablemente estoy haciendo algo mal aquí porque esto parece un poco estúpido.
Soy la creación de un titleview personalizada (en la forma de un UILabel) en mi UINavigationController que es el mismo en todas las páginas. Para facilitar esto, he creado una función en mi aplicación delegado para mostrar la etiqueta correctamente. entonces yo llamo esta función en cualquier subvistas justo después de que empujarlo a la pila de navegación.
Aquí está el código (que probablemente tiene más sentido que mi explicación):

//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];

Mi problema es que cuando empujo la siguiente vista controlador en la pila, y las nuevas diapositivas controlador a través sin problemas, para toda la duración de la animación la etiqueta se pega a la parte superior izquierda antes de que finalmente romperse en su lugar después de la animación es terminado . Parece realmente extraño y feo. ¿Cómo puedo configurar la etiqueta adecuada para que se deslice de la siguiente vista sin problemas? Sin duda, es algo simple que me falta ...

¿Fue útil?

Solución 2

Lo que terminé haciendo fue el uso de una imagen con el texto incluido como los antecedentes de la cabecera, por lo que en lugar de la animación sin problemas, ya que quería originalmente, no es la animación en absoluto.
Teniendo en cuenta que es la misma partida en todas partes, no es que una gran cosa sin embargo.

Otros consejos

Una respuesta muy tarde para esta pregunta, pero me acabo de encontrar con el mismo problema y encontrado otra manera de resolverlo, sin necesidad de utilizar una imagen. Pensé en compartir mi solución, ya que podría ayudar a alguien.

En mi caso estoy fijando una costumbre UILabel sea el titleview, y me di cuenta de que sólo cuando lo establezca la propiedad titleview en el método viewDidLoad, el anime correctamente. En algunos casos, sin embargo, yo no sabía que el título aún en mi viewDidLoad (en algunos casos que necesitaba usar un título de una petición HTTP, por ejemplo). Por lo tanto, mi solución para aquellos casos era establecer la propiedad titleview a mi customLabel con el texto @"" en viewDidLoad, y cada vez que tengo el título real que sólo se cambia la propiedad de texto de mi etiqueta personalizada.

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

Yo estaba en una situación similar a Ylva, utilizando una instancia de una clase de texto personalizado para la propiedad UINavigationItem's titleView. Sin embargo, me encontré con la configuración en viewDidLoad no se resuelva el problema técnico de animación.

Mi solución al problema era esperar hasta que el controlador de vista en cuestión estaba siendo se desprendió la pila del mando de navegación, y en ese momento retirar el UINavigationItem's encargo titleView por lo que nunca necesita conseguir animada en absoluto.

Cuando mi UINavigationController subclase recibe el mensaje popViewControllerAnimated:, que copia el texto del título de mi campo de texto personalizado (UINavigationItem's titleView) en la propiedad UINavigationItem's title y establezca la propiedad titleView a cero. A continuación, el UINavigationController sigue adelante y se dispara el controlador de vista y sólo la etiqueta de título barra de navegación estándar está animado (no es mi título personalizado), glitch libre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top