【发布时间】:2013-02-06 23:10:03
【问题描述】:
我的滚动视图中有一个导航栏。(使用 StoryBoard)
当用户点击视图时,我想隐藏我的导航栏。
当用户再次点击时,将显示导航栏。
我该怎么做呢?
【问题讨论】:
标签: ios xcode cocoa-touch
我的滚动视图中有一个导航栏。(使用 StoryBoard)
当用户点击视图时,我想隐藏我的导航栏。
当用户再次点击时,将显示导航栏。
我该怎么做呢?
【问题讨论】:
标签: ios xcode cocoa-touch
如果您使用的是导航栏(没有控制器),则必须为导航栏框架的变化以及滚动视图的变化设置动画。在下面的示例中,我只是将导航栏从屏幕顶部移开并相应地调整滚动视图的大小。显然,导航栏和滚动视图都需要 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];
}
【讨论】: