我的滚动视图中有一个导航栏。(使用 StoryBoard)
我想在用户点击视图时隐藏我的导航栏。
当用户再次点击时,将显示导航栏。
我怎样才能做到?
问问题
1150 次
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 回答