在我的 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 中的哪些更改阻止了此操作 .
最佳答案
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/