ppr*_*lon 3 uitabbarcontroller ios swift
我正在尝试在隐藏时向tabBarController添加动画.我可以navigationBarController通过使用来实现这种效果self.navigationController?.isNavigationBarHidden = true.我可以通过使用隐藏tabBar,self.tabBarController?.tabBar.isHidden = true但我没有得到动画我怎么能这样做,谢谢你提前.
Luc*_*nzo 10
我为UIViewController
Swift 4兼容开发了一个util扩展:
extension UIViewController {
func setTabBarHidden(_ hidden: Bool, animated: Bool = true, duration: TimeInterval = 0.3) {
if animated {
if let frame = self.tabBarController?.tabBar.frame {
let factor: CGFloat = hidden ? 1 : -1
let y = frame.origin.y + (frame.size.height * factor)
UIView.animate(withDuration: duration, animations: {
self.tabBarController?.tabBar.frame = CGRect(x: frame.origin.x, y: y, width: frame.width, height: frame.height)
})
return
}
}
self.tabBarController?.tabBar.isHidden = hidden
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在动画中更改标签栏的框架,如下所示:
func hideTabBar() {
var frame = self.tabBarController?.tabBar.frame
frame?.origin.y = self.view.frame.size.height + (frame?.size.height)!
UIView.animate(withDuration: 0.5, animations: {
self.tabBarController?.tabBar.frame = frame!
})
}
func showTabBar() {
var frame = self.tabBarController?.tabBar.frame
frame?.origin.y = self.view.frame.size.height - (frame?.size.height)!
UIView.animate(withDuration: 0.5, animations: {
self.tabBarController?.tabBar.frame = frame!
})
}
Run Code Online (Sandbox Code Playgroud)
将标签栏设置在可见屏幕下方,以便从底部向上/向下滑动.
改进@Luca Davanzo 的响应。如果栏已经隐藏,它将继续隐藏它并将其向下移动。也去掉了返回,所以tabbar.hidden 的状态在动画发生时会发生变化。所以我添加了一个检查:
extension UIViewController {
func setTabBarHidden(_ hidden: Bool, animated: Bool = true, duration: TimeInterval = 0.5) {
if self.tabBarController?.tabBar.isHidden != hidden{
if animated {
//Show the tabbar before the animation in case it has to appear
if (self.tabBarController?.tabBar.isHidden)!{
self.tabBarController?.tabBar.isHidden = hidden
}
if let frame = self.tabBarController?.tabBar.frame {
let factor: CGFloat = hidden ? 1 : -1
let y = frame.origin.y + (frame.size.height * factor)
UIView.animate(withDuration: duration, animations: {
self.tabBarController?.tabBar.frame = CGRect(x: frame.origin.x, y: y, width: frame.width, height: frame.height)
}) { (bool) in
//hide the tabbar after the animation in case ti has to be hidden
if (!(self.tabBarController?.tabBar.isHidden)!){
self.tabBarController?.tabBar.isHidden = hidden
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
7072 次 |
| 最近记录: |