Xcode / iOS:如何在向下滚动时隐藏Navigation- AND ToolBar?

时间:2012-04-16 19:33:50

标签: ios xcode toolbar navigationbar

我想在我的iPhone上向下滚动两个栏。当我向上滚动时,它们应该再次出现..我该如何处理?

4 个答案:

答案 0 :(得分:7)

- (void)scrollViewWillBeginScroll :(UIScrollView *)scrollView {
      if (scrollView.contentOffset.y < lastOffset.y) {
                 [toolBar setHidden:YES];
                 [[[self navigationController] navigationBar] setHidden:YES];
      } else{
                 // unhide
      }
}

- (void)scrollViewDidScroll :(UIScrollView *)scrollView {
      /// blah blah
      lastOffset = scrollView.contentOffset;
}

注意lastOffsetCGPoint,它位于您的标头文件中:@Interface

答案 1 :(得分:4)

接受的答案对我不起作用,因为scrollViewWillBeginScroll:不是委托方法。

相反,我做

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldHide" object:self];

}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView 
                 willDecelerate:(BOOL)decelerate
{
    if(!decelerate)
        [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide" 
                                                            object:self];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide"
                                                        object:self];
}

app对象中的任何位置都可以侦听此通知,例如

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldHide" 
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
        //hide tab bar with animation;
    }];
    [[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldUnhide" 
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
        //Unhide tab bar with animation;
    }];
}

此代码将隐藏任何滚动条。如果你想只使用down,那么与接受的答案相同的locationOffset技巧应该有效。

答案 2 :(得分:0)

这是我在Swift中的解决方案;它工作得很漂亮

func scrollViewDidScroll(scrollView: UIScrollView) {
    let navController: UINavigationController = self.navigationController!
    if self.collectionView.panGestureRecognizer.translationInView(self.view).y <= 0.0 {
        defaultCenter.postNotificationName("stuffShouldHide", object: self)
    } else {
        defaultCenter.postNotificationName("stuffShouldUnhide", object: self)
    }
}

答案 3 :(得分:0)

您可以查看这个,可以从iOS8获得,我认为这与您正在寻找的相反......但值得检查,因为它是标准的,这就是Safari的工作方式。

  

夫特

     

var hidesBarsOnSwipe:Bool

     

目标-C

     

@property(非原子,readwrite,assign)BOOL hidesBarsOnSwipe   讨论

     

当此属性设置为YES时,向上滑动会隐藏导航   栏和工具栏。向下滑动再次显示两个条形。如果   工具栏没有任何项目,即使在a之后仍然可见   刷卡。此属性的默认值为NO。