ios - UITabBar 的怪异帧计算

标签 ios swift frame uitabbar

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

weird uitabbar frame

有没有人遇到过这种情况并且知道为什么会发生或者更好地解决/避免这种情况?我认为它开始发生在 Swift 上,所以也许他们的另一个很棒的优化?

也不确定如何重现它,大约每周发生两次,可能是旋转、segue 或应用程序切换。

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

最佳答案

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

1) 在 UINavigationController 弹出导航期间立即旋转;

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

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

- (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/

相关文章:

c++ - Dlib 正面人脸检测在 IOS 中不起作用。?

ios - 从 Firebase 单元格中删除数据

javascript - HTML OnClick() 事件不起作用

ios - 随机 UICollectionView 网格

ios - 如何控制 appdelegate 中的 View Controller ?

arrays - 从 SWIFT 中的 API 动态获取字段

swift - 为什么几何阅读器不将其 child 居中?

JAVA SocketServer 带框架

selenium-webdriver - Katalon Studio弹出元素识别

ios - 将单元格添加到 UITableView,但它们不会在视觉上显示,但我可以单击并且它们可以工作