Pregunta

Problema extraño: después de rotar mi aplicación al retrato, elegir el elemento de la barra de herramientas y exponer el UIPOPoverController, si giro de nuevo al paisaje, el Uinavigation Controller en el lado derecho (ObjectAtIndex: 0 de la vista dividida) cambia el color de la barra de navegación. No estoy seguro por qué. Lo tengo configurado en Interface Builder para ser barstyle = uibarStyleBlackOpaque;

Se pone plateado después de que regresa al modo paisajista.

Esto solo sucede si lo giro al retrato, creo el Popover y selecciono algo en el controlador de navegación, que empuja otro TableViewController. Incluso configurar las propiedades en el método ViewDidload no hace nada.

¿Alguien tiene una idea?

¿Fue útil?

Solución

ViewDidload solo se llamará la primera vez que se muestra su vista (o si se borra debido a problemas de memoria). Intente volver a ajustar el estilo de bar en su ViewWillapPear, o incluso-SplitViewController: WillshowViewController: InvalidatingBarButtonItem:.

Otros consejos

Para Steve (Detect PopView o SplitView NavigationBar de RootViewControll) [SplitView iPad

YUO tiene que crear un método de clase (Setland: int i) en rootViewController llamado desde DISPLITSViewController en este método:

- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    // LANDSCAPE !!!!
    [RootViewController setLand:1];

y

- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {
    // PORTRAIT!!
    [RootViewController setLand:0];

y en rootViewController:

    static int landscape=2;

    ...

// SetMethod for class variable landscape   
        + (void)setLand:(int)i 
        {
            if(landscape!=i){
                landscape = i;

            }
        }

y finaly siempre en RootViewController

 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     if(landscape == 1)
     {
       //LANDSCAPE!
       CUSTOM FOR LANDSCAPE
       self.navigationController.navigationBar.barStyle =...
     }
     else if(landscape == 0)
     {
       //PORTRAIT!
       CUSTOM FOR PORTRAIT
       self.navigationController.navigationBar.barStyle =...
     }
   }

.. Esto funciona bien en mi aplicación, editando el paisaje personalizado/navegación de retratos en

Parece haber un problema con 4.2 y establecer el tintcolor de la barra de navegación después de la rotación. Puede configurar el estilo de barra correctamente usando las respuestas anteriores, pero no el tintcolor. ¿Alguien mas esta teniendo el mismo problema?

@Brendan G. Lim y cualquier otro que tenga problemas con el Tintcolor, finalmente lo hicieron funcionar con una barra de navegación personalizada:

  1. Cree un archivo de navegación personalizado subclasificado desde UinavigationBar
@interface CustomNavigationBar : UINavigationBar 
{
}

@end
  1. En su archivo de implementación, anule el método SettIntcolor
@implementation CustomNavigationBar

-(void)setTintColor:(UIColor *)tintColor
{
  [super setTintColor :[self tintColor]];
}

@end
  1. Abra mainwindow.xib y seleccione su barra de navegación a la que desea establecer el color. En su panel de identidad [Apple] [4] Seleccione CustomNavigationBar como clase.

  2. En el panel de atributos [manzana] [1], establezca el color de la barra.

¡Eso es todo!

Tengo este mismo problema, pero restablecer el estilo Barstyle en ViewWillapPear causa otro problema. Configurarlo también lo establece cuando se muestra en el Popover, por lo que ya no coincide con el color de Popover. ¿Cómo puedo configurar el estilo de barra en lo que quiero solo cuando se muestra en el panel izquierdo del controlador de vista dividida? Supongo que podría configurarlo a la vista solo aparecerá cuando la orientación sea paisaje, pero eso parece sucio. Además, configurarlo en SplitViewController: WillshowViewController: InvalidatingBARButtonitem: no funciona en absoluto, ya que creo que esto se llama antes de que el controlador de vista Split establezca los estilos de nuevo en valor predeterminado. Esto parece un error realmente estúpido por parte de Apple. Debería volverlo al estilo que originalmente era, no el predeterminado.

Presentó un informe de errores hace esta semana y Apple dijo que este es un error conocido de 4.2. Luego pregunté si había una manera de solucionar esto, pero no hay respuesta hasta ahora.

Tampoco sirve de nada reemplazar la barra de uinavigation con una barra de navegación subclasificada/personalizada. El Popover parece realizar algunas cosas secretas desagradables en el uinavigatiobar que mata al tintcolor y no permitirá reiniciarlo (siempre permanecerá 'nulo', incluso después de restablecerlo).

Básicamente me di por vencido y le dije al cliente que tendrá que vivir con él hasta que salga la próxima actualización (con suerte).

Este problema se soluciona utilizado el siguiente código

@implementation ChangeNavigationBarColor

- (void) setTintColor:(UIColor*)color
{
    [super setTintColor:[[BrandingManager sharedBrandingManager] tintColorForNavigationController]];
}


@interface ChangeNavigationBarColor : UINavigationBar {

}

@end

Genial, lo arregló.

Agregado a mi RootViewController donde se declara SplitViewController y NAV Bar:

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:YES];


    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;

}

Puede usar una clase separada para cambiar el color, hacer el color de fondo de esa clase, su color deseado y luego usar esa clase como clase de su RootViewController. Lo hice, funciona.

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