2

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

4

1 回答 1

3

如果您使用导航栏(没有控制器),则必须为导航栏框架的变化以及滚动视图的变化设置动画。在下面的示例中,我只是将导航栏从屏幕顶部移开并相应地调整滚动视图的大小。您显然需要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];
}
于 2013-02-06T23:15:32.670 回答