UITabBar

时间:2016-04-05 19:32:09

标签: ios swift frame uitabbar

有时应用会缩小UITabBar的宽度,屏幕截图中的4个图标通常分布在整个宽度上。

weird uitabbar frame

是否有人遇到这种情况并知道为什么会发生这种情况,甚至更好地解决/避免它?我认为它开始发生在Swift上,所以可能是他们的另一个非常棒的优化?

也不确定如何重现它,每周发生两次,可能是旋转,segue或app切换。

此屏幕截图来自iPhone6的纵向模式,但也会在其他设备上发生。

1 个答案:

答案 0 :(得分:2)

我在两种情况下在iOS9上发现了相同的行为:

1)在UINavigationController;

中弹出导航期间立即轮换

2)在观看全屏视频播放器并关闭播放器之后,从横向旋转到纵向。

要解决iOS8 +上的问题,您应该继承UITabBarController并从UIContentContainer协议实现方法,如下所示:

- (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字符串,你就不会解决第二个问题。

在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)
        }
    }
}