美文网首页SwiftSwift专题寒哥管理的技术专题
关于在用Swift开发iOS时如何隐藏NavigationBar

关于在用Swift开发iOS时如何隐藏NavigationBar

作者: 哈仕啦 | 来源:发表于2015-08-05 18:48 被阅读5222次

举个例子:如果我有一个页面需要进入时同时隐藏NavigationBar和TabBar,那么我就在那个页面的ViewController的代码里加上下面的代码。就可以实现了。接下来告诉大家每一块要注意的地方。

1、假如只要隐藏NavigationBar的话就不要setTabBarVisible这一句就好

override func viewWillAppear(animated: Bool) {
    setTabBarVisible(!tabBarIsVisible(), animated: true)
    setNavBarVisible(!navBarIsVisible(), animated: true)
}

2、这些都直接复制过去就好了

func setTabBarVisible(visible:Bool, animated:Bool) {
    if (tabBarIsVisible() == visible) { return }
    let frame = self.tabBarController?.tabBar.frame
    let offsetY = (visible ? CGFloat(0) : 49.0)           

这里要注意,这里是偏移量,修改这里的时候一定要按需求来,首先假设我们的setTabBarVisible(!tabBarIsVisible(), animated: true)函数是放在ViewWillAppear函数里(就像本例)。也就是说这个函数发生在这个界面将要加载时发生的,那么你看看自己的需要,你需要这个页面是(假如当时没TabBar就显示TabBar,假如有TabBar那就有,也不隐藏)的话,那么这里设定的值就应该是(visible ? -49.0 : CGFloat(0))
     其实简单地说这句话的意思是TabBar的上移下移 = (TabBar在?(不在就做这个):(在就做这个))
    所以说冒号前后两个就是分别填 -49.0(上移)、 49.0(下移)、 和CGFloat(0)(不做移动) 这3个中的两个,这就代表着这个函数到底做了什么

    let duration:NSTimeInterval = (animated ? 0.3 : 0.0)   

应该都很好懂吧0.3就是隐藏时的持续时间

    if frame != nil {
        UIView.animateWithDuration(duration) {
        self.tabBarController?.tabBar.frame = CGRectOffset(frame!, 0, offsetY!)
        return
        }
    }
}

    func tabBarIsVisible() ->Bool {
    return self.tabBarController?.tabBar.frame.origin.y < CGRectGetMaxY(self.view.frame)
}
func setNavBarVisible(visible:Bool, animated:Bool) {
    if (navBarIsVisible() == visible) { return }
    let frame = self.navigationController?.navigationBar.frame
    let offsetY = (visible ? CGFloat(0) : -64.0)            

这里的偏移也和TabBar的一样,大家参照着看看就好了。

    let duration:NSTimeInterval = (animated ? 0.3 : 0.0)
    if frame != nil {
    UIView.animateWithDuration(duration) {
        self.navigationController?.navigationBar.frame = CGRectOffset(frame!, 0, offsetY)
        return    
    }
}
    func navBarIsVisible() ->Bool {
        return self.navigationController?.navigationBar.frame.origin.y > CGRectGetMinY(UIScreen.mainScreen().bounds)
}

相关文章

网友评论

  • 水爱上鱼:您好,我问下如果我想隐藏导航栏,但是还是要显示导航栏的字 好解决么
  • 文瑶906:这个是3.1 的代码:
    func setTabBarVisible(visible:Bool,animated:Bool) {
    if (tabBarIsVisible() == visible) { return }
    let frame = self.tabBarController?.tabBar.frame
    let offsetY = (visible ? -49.0 : 49.0)

    let duration:TimeInterval = (animated ? 0.3 : 0.0)
    if frame != nil {
    UIView.animate(withDuration: duration) {
    self.tabBarController?.tabBar.frame = frame!.offsetBy(dx: 0, dy: CGFloat(offsetY))
    return
    }
    }
    }
  • cef1c46903ab:let offsetY = (visible ? CGFloat(0) : 49.0) 错误的,应该是let offsetY:CGFloat = (visible ? -49.0 : 49.0)

本文标题:关于在用Swift开发iOS时如何隐藏NavigationBar

本文链接:https://www.haomeiwen.com/subject/zizvqttx.html