iOS:滚动表格 View 时隐藏和显示自定义导航栏

标签 ios objective-c uiscrollview uinavigationbar uirefreshcontrol

我有一个自定义导航栏,我试图在滚动时隐藏它并在滚动停止时显示它。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
        self.navigationBView.hidden = YES;
        self.bTableView.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame));
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    self.navigationBView.hidden = NO;
     self.bTableView.frame = CGRectMake(0, CGRectGetHeight(self.navigationBView.frame), CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame) - CGRectGetHeight(self.navigationBView.frame));
}

但问题是我还使用了 UIRefreshControl 来进行拉动刷新方法。当我尝试拖动 tableView 进行刷新时,它会调用

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

并隐藏导航栏。有没有一种方法可以检查用户是否从屏幕顶部(即从第一个表格单元格)下拉?

我试过

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y != 0)
    {
        self.navigationBView.hidden = YES;
        self.bTableView.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame));
    }

}

但是当用户向下滚动减慢时,这不会隐藏导航栏。有什么办法可以解决这个问题吗?

最佳答案

只需在 scrollViewWillBeginDragging 中将条件 != 更改为 >=

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y >= 0)
    {
        self.navigationBView.hidden = YES;
        self.bTableView.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame));
    }

}

关于iOS:滚动表格 View 时隐藏和显示自定义导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285912/

相关文章:

c++ - 如何在c++ opengles ios中取消绑定(bind)glBindFramebuffer

ios - 如何在 UITableView 的部分标题中设置字体颜色?

objective-c - 是否可以通过 IB 指定 UITextField 中的最大字符数

objective-c - 在 UINavigationController 中收到有关不成功的向后滑动手势的通知

iphone - 如何显示来自 MKAnnotationView 的多个标注?

ios - Xcode 看不到 swift 子类

ios - 仅使用 printf 在 Objective-C 中绘制之字形图案

ios - 为 UIWebView 的白色反弹区域添加颜色

ios - ScrollView swift 3 中的垂直对齐图像

ios - Xcode 中调试器和目标输出之间的区别