有时应用程序会缩小uitabar的宽度,屏幕截图中的4个图标通常分布在整个宽度上。
ios - UITabBar的怪异帧计算-LMLPHP
有没有人经历过这种情况,知道为什么会发生这种情况,或者知道如何解决/避免这种情况?我认为它开始发生在Swift身上,所以也许他们的另一个令人敬畏的优化?
也不知道如何重现它,大约每周发生两次,可能轮换,segue或应用程序切换。
这张截图来自一台iPhone6的肖像模式,但也发生在其他设备上。

最佳答案

在两个案例中,我在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)
        }
    }
}

关于ios - UITabBar的怪异帧计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36435451/

10-14 23:20