animation - 如何在 iOS 13 中隐藏带有动画的标签栏?

标签 animation show-hide uitabbar ios13 cgaffinetransform

在我的 tabBarController 中,我使用这两种方法来隐藏/显示 tabBar:

func showTabBar() {
    tabBar.isHidden = false
    UIView.animate(withDuration: 0.3) {
        self.tabBar.transform = .identity
    }
}

func hideTabBar() {
    UIView.animate(withDuration: 0.3, animations: {
        self.tabBar.transform = CGAffineTransform(translationX: 0, y: self.tabBar.frame.height)
    }, completion: { _ in
        self.tabBar.isHidden = true
    })
}

这在 iOS 12 及更低版本中运行良好,但在 iOS 13 中,当应用转换时,整个 tabBar 都会损坏(见图)。我知道你可以隐藏带有帧动画的 tabBar,但应用转换要容易得多,我不明白为什么这会被破坏和 iOS 13 中的哪些更改阻止了此操作 .

enter image description here

最佳答案

tabbar 的 'transform' 属性目前在 iOS 13 中不起作用,也许以后会起作用。

隐藏标签栏时,您只需要按住标签栏的最后一帧。

显示标签栏: -

func showTabbar(_ tabBarController: UITabBarController?, _ lastTabBarFrame: CGRect?) {
    if #available(iOS 13, *) {
        UIView.animate(withDuration: 0.3, animations: {
            tabBarController?.tabBar.frame = lastTabBarFrame ?? .zero
        }, completion: { (_) in
        })
    } else {
        UIView.animate(withDuration: 0.3, animations: {
            tabBarController?.tabBar.transform = .identity
        }, completion: { (_) in
        })
    }
}

隐藏标签栏: -
func hideTabbar(_ tabBarController: UITabBarController?, _ lastTabBarFrame: CGRect?, _ view: UIView) {
    if #available(iOS 13, *) {
        UIView.animate(withDuration: 0.3, animations: {
            tabBarController?.tabBar.frame = CGRect(x: 0, y: view.bounds.height + (lastTabBarFrame?.height ?? 0.0) + 20, width: lastTabBarFrame?.width ?? 0.0, height: lastTabBarFrame?.height ?? 0.0)
        }) { (_) in
        }
    } else {
        UIView.animate(withDuration: 0.3, animations: {
            tabBarController?.tabBar.transform = CGAffineTransform(translationX: 0, y: tabBarController?.tabBar.frame.height ?? 0.0)
        }) { (_) in
        }
    }
}

如何使用: -
var lastTabBarFrame: CGRect?

self.lastTabBarFrame = self.tabBarController?.tabBar.frame

hideTabbar(self.tabBarController, self.lastTabBarFrame, self.view)

showTabbar(self.tabBarController, self.lastTabBarFrame)

关于animation - 如何在 iOS 13 中隐藏带有动画的标签栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59128910/

相关文章:

java - 如何创建动画方法并将其放入绘制方法中?我的代码不起作用

jQuery 单选按钮根据选择/选中显示/隐藏

ios - 在显示转场时隐藏 UITabbar 并显示工具栏

iphone - iOS 11 iPhone X 模拟器选项卡栏图标和标题呈现在顶部,相互覆盖

ios - 快速调整标签栏大小后调整 subview 大小

javascript - 平滑的 Canvas 动画

java - AnimatedVectorDrawable 抛出 UnsupportedOperationException

flutter - flutter 如何从底部产生模态路线动画

vba - 显示/隐藏不同用户的不同控件 MS Access 表单

javascript - onClick show/hide 想要在隐藏 javascript 时折叠图像大小