【问题标题】:Xcode/iOS: How to hide Navigation- AND ToolBar on scroll down?Xcode/iOS:如何在向下滚动时隐藏导航和工具栏?
【发布时间】:2012-04-16 19:33:50
【问题描述】:

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

【问题讨论】:

  • contentOffset的x值增加时,您是否尝试在scrollViewDidScroll:中使用setToolbarHidden:animated:setNavigationBarHidden:animated:
  • 这里请使用英文。这是一个面向全世界人民的平台。当我们开始用德语说话时,很多人听不懂。当您需要德语建议时,请给我发送电子邮件。我认为,使用您可以在我的个人资料中找到的信息,找到我的电子邮件地址应该不难。

标签: ios xcode toolbar navigationbar


【解决方案1】:
- (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;
}

注意lastOffset 是一个CGPoint,它在你的头文件中:@Interface

【讨论】:

  • mdominick:“iVar”是什么意思?
  • 我对此很陌生:S 我如何定义这个变量?是 NSString 吗?
  • 这是一个 CGPoint: 所以 CGPoint lastOffset;它在你的头文件中:@Interface Blah : NSObject { GCPoint lastOffset; }
  • 我在UIScrollViewDelegate中找不到scrollViewWillBeginScroll方法
  • @Shmidt:请看我的回答。
【解决方案2】:

接受的答案对我不起作用,因为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];
}

应用程序对象中的任何位置都可以监听此通知,例如

- (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;
    }];
}

此代码将隐藏任何滚动条。如果您只想关闭,则与接受的答案中相同的 locationOffset 技巧应该可以工作。

【讨论】:

    【解决方案3】:

    这是我在 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)
        }
    }
    

    【讨论】:

      【解决方案4】:

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

      斯威夫特

      var hidesBarsOnSwipe: Bool

      目标-C

      @property(nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe 讨论

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-30
        • 2017-03-03
        • 1970-01-01
        相关资源
        最近更新 更多