2016-04-05 11 views
0

時には、アプリケーションがUITabBarの幅を縮小する場合、スクリーンショットの4つのアイコンは通常、幅全体に分散されます。UITabBarの奇妙なフレーム計算

weird uitabbar frame

は、誰もがこれを経験しているし、それが起こるか、より良い解決方法/それを避ける理由を知っていますか?私はそれがスウィフトで起き始めたと思います。

また、それを再現する方法がわからない場合は、週に2回、回転、セグまたはアプリの切り替えなどが発生します。

このスクリーンショットはiPhone6のポートレートモードですが、他のデバイスでも発生します。

答えて

2

私は2つのケースでiOS9で同じ動作を見つけました:UINavigationControllerでポップ・ナビゲーション中

1)即時回転しながら、

2)フルスクリーンビデオプレイヤーを見ながら、それ以降のプレイヤーを見ながら、風景から肖像画への回転で2)。

- (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]; 
} 

あなたは第二の問題は修正されませんreturn文字列を記述しない場合:UITabBarControllerのサブクラスを作成し、次のようにUIContentContainerプロトコルからのメソッドを実装する必要がありiOS8 +上の問題を解決するために

。スウィフトに同じ追加

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

こんにちは、まだ問題が発生したことは、それを再現するため、これが動作するかどうかわかりません。しかし、誠実に私はそう信じています。ありがとう! –

+0

iPad + iPhone6で再生する:タブバーを使わずに画面に入り、タブバーを表示してデバイスを回転させる。戻る –