2016-04-05 9 views
0

Manchmal schrumpft die App die Breite der UITabBar, die 4 Symbole im Screenshot sind in der Regel über die gesamte Breite verteilt.Weird Frame-Berechnung für UITabBar

weird uitabbar frame

Ist jemand dies erlebt und weiß, warum es passiert oder noch besser, wie es zu beheben/vermeiden? Ich denke, es begann mit Swift, also vielleicht eine weitere ihrer großartigen Optimierungen?

Auch nicht sicher, wie es zu reproduzieren, passiert etwa zweimal pro Woche, vielleicht Rotation, Überleitung oder App wechseln.

Dieser Screenshot stammt von einem iPhone6 ​​im Hochformat, passiert aber auch auf anderen Geräten.

Antwort

2

ich das gleiche Verhalten auf iOS9 in zwei Fällen gefunden:

1), während sofortige Drehung während der Pop-Navigation in UINavigationController;

2) bei der Drehung von Querformat zu Hochformat, während der Vollbild-Videoplayer und der abschließende Player danach angeschaut werden.

Um das Problem zu lösen iOS8 + Sie UITabBarController und implementieren Methode von UIContentContainer Protokollunterklasse sollte wie folgt:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    if (!self.tabBar.window) return; 

    [coordinator animateAlongsideTransition: ^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 
     CGRect newBounds = self.tabBar.bounds; 
     newBounds.size.width = size.width; 
     self.tabBar.bounds = newBounds; 

     [self.view.superview setNeedsLayout]; 
    } 
          completion: nil]; 
} 

Wenn Sie Sie das zweite Problem beheben wird nicht nicht return String schreiben.

gleichen Hinzufügen in Swift:

extension UITabBarController { 
    public override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
     super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
     if let _ = self.tabBar.window { 
      coordinator.animateAlongsideTransition({ (context) in 
       self.tabBar.bounds.size.width = size.width 
       self.view.superview?.setNeedsLayout() 
       }, completion: nil) 
     } 
    } 
} 
+0

Hallo, immer noch Probleme haben, es zu reproduzieren, so kann nicht sagen, ob das funktioniert. Aber in gutem Glauben glaube ich es, also danke! –

+0

Reproduzieren auf iPad + iPhone6: Bildschirm ohne Tabbar eingeben, klicken Sie zurück, um mit Tabbar anzuzeigen und Gerät zu drehen .. Fix: Diese Antwort ist genial, sorry, dass ich Sie nicht mehr als einmal upvote !!! –