在我的应用中,我试图在滚动时隐藏UITableViewController
的导航栏。我尝试过使用self.navigationController.hidesBarsOnSwipe = YES;
,但它添加了一个非常奇怪的底部空格并隐藏了UIStatusBar
的背景。我想在向下滚动时隐藏导航栏,当向上滚动一点时,让navBar重新出现。我正在寻找的这种行为与Instagram的Feed非常相似,滚动时它隐藏了navBar。
有人可以指导我如何通过简单的代码实现这一点,而不涉及一些Github项目或任何类型的外部源。我想最终根据我的需求定制性能。感谢。
答案 0 :(得分:0)
例如,将视图控制器注册为UIScrollViewDelegate。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate (BOOL)decelerate;
在de UIScrollViewDelegate方法中,您可以获取新的contentOffset并相应地向上或向下翻译您的UINavigationBar。
也可以根据您可以设置和计算的某些阈值和因子来设置子视图的alpha值。
希望它有所帮助!
或者您也可以使用此
@property (strong, nonatomic) NSArray *navBarItems;
-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f){
return;
}
CGRect frame = self.navigationController.navigationBar.frame;
frame.origin.y = 20;
if(self.navBarItems.count > 0){
[self.navigationController.navigationBar setItems:self.navBarItems];
}
[self.navigationController.navigationBar setFrame:frame];
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f){
return;
}
CGRect frame = self.navigationController.navigationBar.frame;
CGFloat size = frame.size.height - 21;
if([scrollView.panGestureRecognizer translationInView:self.view].y < 0)
{
frame.origin.y = -size;
if(self.navigationController.navigationBar.items.count > 0){
self.navBarItems = [self.navigationController.navigationBar.items copy];
[self.navigationController.navigationBar setItems:nil];
}
}
else if([scrollView.panGestureRecognizer translationInView:self.view].y > 0)
{
frame.origin.y = 20;
if(self.navBarItems.count > 0){
[self.navigationController.navigationBar setItems:self.navBarItems];
}
}
[UIView beginAnimations:@"toggleNavBar" context:nil];
[UIView setAnimationDuration:0.2];
[self.navigationController.navigationBar setFrame:frame];
[UIView commitAnimations];
}