如何在iOS 13中使用动画隐藏选项卡栏?

在我的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中发生了哪些更改,从而阻止了此操作

如何在iOS 13中使用动画隐藏选项卡栏?

c139261 回答:如何在iOS 13中使用动画隐藏选项卡栏?

标签栏的

'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,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)
本文链接:https://www.f2er.com/2997538.html

大家都在问