与UITabBar一起使用hidesBarsOnSwipe

时间:2014-11-02 23:39:01

标签: ios swift uitabbarcontroller

我最近切换到在我的应用中使用UITabBarController,并且发现我无法让hidesBarsOnSwipe使用它并没有乐趣。我只是简单地说(在视图控制器中)hidesBarsOnSwipe = true,但现在这不起作用。如果有人能帮助我完成这项工作,那就太棒了。

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以向hideOnSwipe添加操作,如下所示

[self.navigationController.barHideOnSwipeGestureRecognizer addTarget:self action:@selector(swipeGesture:)];

在swipeGesture方法中添加您想要的代码。隐藏/取消隐藏标签栏。

答案 1 :(得分:1)

我解决了这个问题。我在UITabBarController中嵌入了UINavigationController,我已将其作为窗口的根视图控制器。在我只使用标签栏控制器之后,它就像一个魅力。

谢谢!

答案 2 :(得分:0)

在swift3中

  self.navigationController?.barHideOnSwipeGestureRecognizer.addTarget(self, action: "swipeGestuere")  

声明隐藏的变量,这有助于恢复标签栏

 func swipeGestuere() {
    if (hidden == true){         
    self.bottomTabBar.isHidden = true
        hidden = false
    }
    else{
        self.bottomTabBar.isHidden = false
        hidden = true
    }

}                             

答案 3 :(得分:-1)

我通过resizing UITabBarController解决了这个问题,足以将标签栏移出屏幕:

- (void)setTabBarHidden:(BOOL)hidden
{
    CGRect frame = self.originalViewFrame;
    if (hidden)
    {
        frame.size.height += self.tabBar.size.height;
    }
    self.view.frame = frame;
}

然后你可以添加KVO你的滚动视图:

[scrollView addObserver:self
             forKeyPath:@"contentOffset"
                options:NSKeyValueObservingOptionOld
                context:nil];

隐藏/显示滚动标签栏:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    CGPoint oldOffset = [(NSValue *)change[NSKeyValueChangeOldKey] CGPointValue];

    if (!_hidesBarsOnScroll || _scrollView.contentOffset.y == oldOffset.y)
        return;

    // Show on scroll up
    if (_barsHidden &&
        scrollView.contentOffset.y < oldOffset.y &&
        scrollView.contentOffset.y + scrollView.bounds.size.height < scrollView.contentSize.height) // Skip on bottom
    {
        [self.navigationController setNavigationBarHidden:NO
                                                 animated:YES]; // Also navigation bar!
        [self.tabBarController setTabBarHidden:NO
                                      animated:YES];
        _barsHidden = NO;
    }

    // Hide on scroll down
    if (!_barsHidden &&
        scrollView.contentOffset.y > 0 && // Skip on top
        scrollView.contentOffset.y > oldOffset.y)
    {
        [self.navigationController setNavigationBarHidden:YES
                                                 animated:YES];
        [self.tabBarController setTabBarHidden:YES
                                      animated:YES];
        _barsHidden = YES;
    }
}

您可以查看此实施here