2016-09-23 4 views
-1

Dieses Problem ist aufgetreten, nachdem ich zu Xcode 8 gewechselt habe. Wenn ich zurück taste navigation bar mit vorheriger Farbe (schwarz) auftritt und dann ändert es sich normalerweise nach 2 Sekunden. Es gibt ein GUI-Update-Verzögerungsproblem.Xcode 8 Navigationsleiste Zurück Animation Problem

ich diesen Code verwenden vorherigen Navigationsleiste wiederherzustellen:

- (void)restorePreviousNavBarAppearance:(BOOL)animated { 
    if (_didSavePreviousStateOfNavBar) { 
     [self.navigationController setNavigationBarHidden:_previousNavBarHidden animated:animated]; 
     UINavigationBar *navBar = self.navigationController.navigationBar; 
     navBar.tintColor = _previousNavBarTintColor; 
     navBar.translucent = _previousNavBarTranslucent; 
     if ([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) { 
      navBar.barTintColor = _previousNavBarBarTintColor; 
     } 
     navBar.barStyle = _previousNavBarStyle; 
     if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { 
      [navBar setBackgroundImage:_previousNavigationBarBackgroundImageDefault forBarMetrics:UIBarMetricsDefault]; 
      [navBar setBackgroundImage:_previousNavigationBarBackgroundImageLandscapePhone forBarMetrics:UIBarMetricsLandscapePhone]; 
     } 
     // Restore back button if we need to 
     if (_previousViewControllerBackButton) { 
      UIViewController *previousViewController = [self.navigationController topViewController]; // We've disappeared so previous is now top 
      previousViewController.navigationItem.backBarButtonItem = _previousViewControllerBackButton; 
      _previousViewControllerBackButton = nil; 
     } 
    } 
} 

enter image description here

enter image description here

Antwort

0

In iOS 10, UIKit aktualisiert und für UINavigationBar, UITabBar einheitliche Hintergrundverwaltung hat, und UIToolbar. Insbesondere können Änderungen an Hintergrundeigenschaften dieser Ansichten (z. B. Hintergrund- oder Schattenbilder oder Festlegen des Balkenstils) einen Layout-Durchlauf für die Leiste auslösen, um das neue Hintergrundbild aufzulösen. Insbesondere ist diese Mittel, die den Hintergrund Aussehen dieser Stäbe Innenseite layoutSubviews zu ändern versucht, - [UIView updateConstraints], viewWillLayoutSubviews, viewDidLayoutSubviews, updateViewConstraints, oder jede andere Methode, die in Reaktion auf das Layout genannt wird, kann zu eine Layout-Schleife.

In einigen Fällen können Sie diese Layout-Schleifen unterbrechen, indem Sie sicherstellen, dass Sie immer dieselbe Objektinstanz verwenden, wenn Objekte (wie UIImage oder UIColor) erforderlich sind. Aber im Allgemeinen sollten Sie dies vermeiden.

Da alle Darstellungsparameter jetzt auf einmal aufgelöst werden, kann es sein, dass sich in die Darstellung Ihres Balkens geändert hat. Im Allgemeinen werden beste Ergebnisse erzielt, indem Sie so wenig wie möglich für spezifizieren, der Ihren Stab besonders anfertigt. Wenn Sie beispielsweise einen barTintColor-Wert angeben und ein leeres UIImage-Objekt für die backgroundImage-Eigenschaft angeben (wie beim Aufruf von [UIImage new], ), sollten Sie bessere Ergebnisse erzielen, indem Sie nur angeben barTintColor. Alle Änderungen, die Sie vornehmen, um diese Probleme in iOS 10 zu beheben, sollten auch in iOS 9 ordnungsgemäß funktionieren - wenn dies nicht der Fall ist, melden Sie bitte Fehler mit einem Beispielprojekt und einem Screenshot, wie die Bars aussehen sollten.

Der Release Note Bei iOS10: iOS 10.0 Release Note