首页 文章

导航栏显示/隐藏

提问于
浏览
147

我有一个带有2个按钮的导航栏的应用程序 . 当用户双击屏幕时,我想隐藏并显示此导航栏 .

最初,应隐藏导航栏 . 当用户双击屏幕时,导航栏应该会出现动画,就像iPhone的照片库中可以看到的那样 .

我该怎么做呢?建议总是受到赞赏 .

9 回答

  • 7

    首先阅读“适用于iOS的View Controller编程指南”中有关“采用导航视图的全屏布局”的部分以及关于自定义视图的相关部分 . 如果您尝试执行类似Photos.app的操作,那么您可能正在使用滚动视图 . 请注意导航栏自动将滚动内容插入添加到滚动视图的注释,以考虑导航栏(和状态栏)的高度,因此您必须立即将滚动视图的contentInset属性重置为零(UIEdgeInsetsZero)设置navigationBar的初始状态并在视图出现之前 .

    然后,如果您只需点击一下切换导航栏和/或状态栏以显示或隐藏,您需要在切换方法中执行两项操作 . 第一个似乎是在更改NavigationBar隐藏属性之前保存滚动视图的contentOffset属性,然后将保存的值恢复到contentOffset . 第二,在更改navigationBarHidden属性后再次将contentInset属性清零为UIEdgeInsetsZero . 此外,如果要切换状态栏,则需要在更改navigationBar的状态之前更改其状态 .

  • 17

    这不是适合几行代码的东西,但这是一种可能适合您的方法 .

    要隐藏导航栏:

    [[self navigationController] setNavigationBarHidden:YES animated:YES];
    

    要表明:

    [[self navigationController] setNavigationBarHidden:NO animated:YES];
    

    此方法的文档是available here .

    要监听"double click"或双击,子类 UIView 并将该子类的实例作为视图控制器的 view 属性 .

    在视图子类中,覆盖其-touchesEnded:withEvent:方法并计算在一段时间内获得的触摸次数,方法是测量两次连续点击之间的时间,可能是-timeIntervalSinceDate: . 或者测试[touch tapCount]的结果 .

    如果您获得两次点击,您的子视图会发出视图控制器已注册要监听的NSNotification .

    当您的视图控制器听到通知时,它会触发一个选择器,该选择器使用上述代码隐藏或显示导航栏,具体取决于导航栏's current visible state, accessed through reading the navigation bar' s isHidden属性 .

    EDIT

    处理点击事件的答案部分可能在iOS 3.1之前有用 . 如今,UIGestureRecognizer类可能是处理双击的更好方法 .

    EDIT 2

    Swift隐藏导航栏的方法是:

    self.navigationController?.setNavigationBarHidden(true, animated: true)
    

    要表明:

    self.navigationController?.setNavigationBarHidden(false, animated: true)
    
  • 360

    Swift 尝试这个,

    self.navigationController?.navigationBarHidden = true  //Hide
    self.navigationController?.navigationBarHidden = false //Show
    

    要么

    self.navigationController?.setNavigationBarHidden(true, animated: true) //Hide
    self.navigationController?.setNavigationBarHidden(false, animated: true) //SHow
    
  • 7

    一种方法是在属性检查器中取消选中Bar Visibility“显示导航栏” . 希望这可以帮助某人 .

    enter image description here

  • 9

    要隐藏导航栏:

    [self.navigationController setNavigationBarHidden:YES animated:YES];
    

    要显示导航栏:

    [self.navigationController setNavigationBarHidden:NO animated:YES];
    
  • 16
  • -3

    这是一个非常快速和简单的解决方案:

    self.navigationController.hidesBarsOnTap = YES;
    

    这将适用于单击而非双击 . 即使在按下或弹出当前视图控制器之后,它也会改变导航控制器的行为 .

    如果您只想为单个视图控制器设置行为,则可以在viewWillAppear:和viewWillDisappear:actions中的控制器中修改此行为 .

    这是documentation

  • 2

    SWIFT CODE:适用于iOS 3.2及更高版本 .

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
    
        let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")
        tapGesture.delegate = self
        self.view.addGestureRecognizer(tapGesture)
    

    然后写

    func hideNavBarOntap() {
        if(self.navigationController?.navigationBar.hidden == false) {
            self.navigationController?.setNavigationBarHidden(true, animated: true) // hide nav bar is not hidden
        } else if(self.navigationController?.navigationBar.hidden == true) {
            self.navigationController?.setNavigationBarHidden(false, animated: true) // show nav bar
        }
    }
    
  • 0

    这段代码可以帮到你 .

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
    initWithTarget:self action:@selector(showHideNavbar:)];
    [self.view addGestureRecognizer:tapGesture];
    
    -(void) showHideNavbar:(id) sender 
    { 
    // write code to show/hide nav bar here 
    // check if the Navigation Bar is shown
    if (self.navigationController.navigationBar.hidden == NO)
    {
    // hide the Navigation Bar
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
    // if Navigation Bar is already hidden
    else if (self.navigationController.navigationBar.hidden == YES)
    {
    // Show the Navigation Bar
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    }
    }
    

相关问题