Domanda

Strano problema: dopo aver ruotato la mia app per il ritratto, raccogliendo l'elemento della barra degli strumenti ed esponendo l'UipopoverController, se ruoto di nuovo sul paesaggio, l'UinavigationController sul lato destro (ObjectATindex: 0 della splitView) cambia il colore della barra di navigazione. Non sono sicuro del perché. L'ho impostato in Interface Builder come barstyle = UiBarstyleBlackOpaque;

Trasforma l'argento dopo che torna in modalità paesaggio.

Ciò accade solo se lo ruoto per ritratto, creo il popover e seleziono qualcosa nel controller di navigazione, che spinge un altro tableviewcontroller. Anche l'impostazione delle proprietà nel metodo ViewDidload non fa nulla.

Qualcuno ha un'idea?

È stato utile?

Soluzione

ViewDidload verrà chiamato solo la prima volta che viene visualizzata la vista (o se viene cancellata a causa di problemi di memoria). Prova a riprogrammare lo stile di barstyle nel tuo punto di vista, o addirittura-splitViewController: WillShowViewController: invalidatingBarButtonItem:.

Altri suggerimenti

per Steve (rileva popview o splitview navigationbar di rootviewcontroll) [splitview ipad

Yuo deve creare un metodo di classe (Setland: Int I) su RootViewController chiamato da DetailViewController in questo metodo:

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

e

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

e su rootviewcontroller:

    static int landscape=2;

    ...

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

            }
        }

e finaly sempre in 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 =...
     }
   }

.. Questo funziona bene nella mia app, modificando la barra di navigazione paesaggistica/ritratto personalizzata

Sembra esserci un problema con 4.2 e l'impostazione del tintcolor della barra di navigazione dopo la rotazione. È possibile impostare correttamente lorstyle usando le risposte sopra, ma non il tintcolor. Qualcun altro ha lo stesso problema?

@Brendan G. Lim e tutti gli altri che hanno problemi con il TintColor, finalmente hanno fatto funzionare con una barra di navigazione personalizzata:

  1. Crea un file di navigazione personalizzato sottoclasse da Uinavigationbar
@interface CustomNavigationBar : UINavigationBar 
{
}

@end
  1. Nel tuo file di implementazione, sostituire il metodo SettintColor
@implementation CustomNavigationBar

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

@end
  1. Apri mainwindow.xib e seleziona la barra di navigazione in cui si desidera impostare il colore. Nel riquadro di identità [Apple] [4] seleziona CustomNavigationbar come classe.

  2. Nel riquadro degli attributi [Apple] [1] imposta il colore della barra.

Questo è tutto!

Sto avendo lo stesso problema, ma ripristinare lostyle in ViewWillaPappear provoca un altro problema. Impostarlo lì lo imposta anche quando viene mostrato nel popover, quindi non corrisponde più al colore popolare. Come posso impostare lostyle su ciò che voglio solo quando viene mostrato nel riquadro sinistro del controller di vista divisa? Immagino che potrei metterlo in vista apparirà solo quando l'orientamento è paesaggio ma sembra sporco. Inoltre, impostarlo in SplitViewController: WillShowViewController: invalidatingBarButtonItem: non funziona affatto poiché penso che questo sia chiamato prima che il controller di visualizzazione divisa riporti gli stili su predefinito. Questo sembra un bug davvero stupido da parte di Apple. Dovrebbe cambiarlo di nuovo nello stile che originariamente era, non quello predefinito.

Ha presentato una relazione di bug su questa settimana e Apple ha affermato che questo è un bug noto di 4.2. Ho quindi chiesto se c'era un modo per risolvere questo problema, ma finora nessuna risposta.

Inoltre, non serve a sostituire la barra uinavigation con una barra di navigazione sottoclassata/personalizzata. Il popover sembra eseguire alcune cose cattive segrete su Uinavigatiobar che uccide il tintcolor e non permetterà di ripristinarlo (rimarrà sempre "zero", anche dopo averlo ripristinato).

Fondamentalmente ho rinunciato e ho detto al cliente che dovrà conviverci fino a quando il prossimo aggiornamento non sarà fuori (si spera).

Questo problema è risolto utilizzato il seguente codice

@implementation ChangeNavigationBarColor

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


@interface ChangeNavigationBarColor : UINavigationBar {

}

@end

Cool, risolto.

Aggiunto al mio rootViewController in cui si dichiarano splitViewController e Nav Bar:

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:YES];


    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;

}

Puoi usare una classe separata per cambiare colore, creare il colore di sfondo quella classe, il colore desiderato e quindi utilizzare quella classe come classe del tuo rootviewcontroller. L'ho fatto, funziona.

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