4 Stimmen

iPad SplitView ändert die Farbe der Hauptnavigationsleiste

Seltsames Problem: Nachdem ich meine App ins Hochformat gedreht, das Toolbar-Element ausgewählt und den uipopovercontroller exponiert habe, ändert der UINavigationController auf der rechten Seite (objectAtIndex:0 der SplitView) die Farbe der Navigationsleiste, wenn ich zurück ins Querformat drehe. Ich bin mir nicht sicher, warum. Ich habe es in Interface Builder auf barStyle = UIBarStyleBlackOpaque eingestellt;

Nach der Rückkehr ins Querformat wird es silbern.

Dies geschieht nur, wenn ich es auf Hochformat drehen, erstellen Sie die Popover, und wählen Sie etwas in der Navigation-Controller, die eine andere tableViewController schiebt. Auch die Einstellung der Eigenschaften in der viewDidLoad-Methode bewirkt nichts.

Hat jemand eine Idee?

7voto

Ben Gottlieb Punkte 84876

ViewDidLoad wird nur aufgerufen, wenn Ihre Ansicht zum ersten Mal angezeigt wird (oder wenn sie aufgrund von Speicherproblemen gelöscht wird). Versuchen Sie, den barStyle in Ihrem viewWillAppear neu zu setzen, oder sogar - splitViewController:willShowViewController:invalidatingBarButtonItem:.

2voto

ikanimo Punkte 21

für Steve (PoPView oder splitView navigationBar von RootViewControll erkennen) [splitview IPAD]

Sie müssen eine Klassenmethode (setLand:int i) auf RootViewController erstellen, die von Detailviewcontroller in dieser Methode aufgerufen wird:

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

und

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

und auf RootViewController:

    static int landscape=2;

    ...

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

            }
        }

und schließlich immer im 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 =...
     }
   }

das funktioniert gut in meiner App, die Bearbeitung benutzerdefinierter Landscape/Portrait navigationBar

2voto

Brendan G. Lim Punkte 391

Es scheint ein Problem mit 4.2 und dem Setzen der tintColor der navigationBar nach der Rotation zu geben. Sie können die barStyle korrekt mit den Antworten oben eingestellt, aber nicht die tintColor. Hat noch jemand das gleiche Problem?

2voto

PostCodeism Punkte 1050

@Brendan G. Lim und alle anderen, die Probleme mit der tintColor haben, haben es endlich geschafft, mit einer benutzerdefinierten Navigationsleiste zu arbeiten:

  1. Erstellen einer benutzerdefinierten Navigationsdatei, die von UINavigationBar subclassed ist
@interface CustomNavigationBar : UINavigationBar 
{
}

@end
  1. Überschreiben Sie in Ihrer Implementierungsdatei die Methode setTintColor
@implementation CustomNavigationBar

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

@end
  1. Öffnen Sie die Datei MainWindow.xib und wählen Sie die Navigationsleiste aus, für die Sie die Farbe festlegen möchten. Wählen Sie in Ihrem Identitätsfenster [Apple][4] die Klasse CustomNavigationBar aus.

  2. Legen Sie im Attributbereich [Apple][1] die Farbe des Balkens fest.

Das war's!

1voto

RyeMAC3 Punkte 1023

Gut, ich habe es korrigiert.

Hinzugefügt zu meinem RootViewController, wo der Splitviewcontroller und die Navigationsleiste deklariert sind:

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:YES];

    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X