在tableView滚动上显示和隐藏导航栏

时间:2014-06-08 10:26:20

标签: objective-c uitableview ios7 uinavigationbar

在桌面滚动时显示和隐藏导航栏,最初导航栏是隐藏的.Tableview只包含一个节标题,当我们向上滚动节标题到达顶部但是当我们向下轻微向下滚动状态栏和导航栏时会生动地显示向下拉节目标题但随着节标题向下滚动导航栏和状态栏隐藏。我想实现这种情况。我试图实现这一点,但最初隐藏导航栏并带来导航栏创建一个抽搐效果,隐藏导航栏时也是如此。请帮帮我。

2 个答案:

答案 0 :(得分:2)

您正在描述类似于Facebook,Instagram和Chrome的解决方案,但您说导航栏应该最初隐藏。

This thread为Facebook风格的导航栏提供了几个解决方案,甚至是link to a control。它可能仍然是你想要的。

答案 1 :(得分:2)

我认为抽搐可能是由于桌面视图在滚动到顶部或底部后反弹。

在隐藏/显示条形图之前,您应该有一个阈值。

来自here的一些示例代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // ...

    // Register for KVO
    if (_hidesBarsOnScroll)
    {
        [_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];
        [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;
    }
}

至于Google+似乎对我有用,我不认为这是一个部分标题,但是当您向下滚动时,单元格内容会从表格视图中移出到控制器的视图中。 / p>

controller > view > tableView > cell > contentView > sectionHeaderLikeView

滚动(使用委托或KVO)时变为:

controller > view > tableView > cell > contentView
                  > sectionHeaderLikeView

显示和隐藏栏会调整控制器的view并保持sectionHeaderLikeView