【问题标题】:How can i hide/show my navigation bar (Not navigation controller) when tapped on view?点击视图时如何隐藏/显示我的导航栏(不是导航控制器)?
【发布时间】:2013-02-06 23:10:03
【问题描述】:

我的滚动视图中有一个导航栏。(使用 StoryBoard)
当用户点击视图时,我想隐藏我的导航栏。
当用户再次点击时,将显示导航栏。
我该怎么做呢?

【问题讨论】:

    标签: ios xcode cocoa-touch


    【解决方案1】:

    如果您使用的是导航栏(没有控制器),则必须为导航栏框架的变化以及滚动视图的变化设置动画。在下面的示例中,我只是将导航栏从屏幕顶部移开并相应地调整滚动视图的大小。显然,导航栏和滚动视图都需要 IBOutlet 引用:

    @interface ViewController ()
    
    @property (nonatomic) BOOL navigationBarHidden;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.navigationBarHidden = NO;
    
        UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [self.scrollView addGestureRecognizer:gesture];
    }
    
    - (void)handleTap:(id)sender
    {
        [UIView animateWithDuration:0.5
                         animations:^{
                             CGRect navBarFrame = self.navBar.frame;
                             CGRect scrollViewFrame = self.scrollView.frame;
    
                             if (self.navigationBarHidden)
                             {
                                 navBarFrame.origin.y += navBarFrame.size.height;
                                 scrollViewFrame.size.height -= navBarFrame.size.height;
                             }
                             else
                             {
                                 navBarFrame.origin.y -= navBarFrame.size.height;
                                 scrollViewFrame.size.height += navBarFrame.size.height;
                             }
    
                             self.scrollView.frame = scrollViewFrame;
                             self.navBar.frame = navBarFrame;
    
                             self.navigationBarHidden = !self.navigationBarHidden;
                         }];
    }
    @end
    

    如果您使用自动布局,它会略有不同(您必须为约束的变化设置动画),但基本思想是相同的。如果您仅针对 iOS 6 及更高版本并使用自动布局,请告诉我。


    如果您使用的是导航控制器,它会更容易一些,因为您可以使用 setNavigationBarHidden 隐藏:

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

    您可以显示:

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

    如果您想通过点击执行此操作,您可以执行以下操作(为此,您需要在滚动视图中添加 IBOutlet):

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [self.scrollView addGestureRecognizer:gesture];
    }
    
    - (void)handleTap:(id)sender
    {
        BOOL hidden = self.navigationController.navigationBarHidden;
    
        [self.navigationController setNavigationBarHidden:!hidden animated:YES];
    }
    

    【讨论】:

    • 您的帮助对我非常有用。我很重视你的帮助。你的回答让我更容易发展。非常感谢。
    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多