【问题标题】:Minimize Navigation Bar while scrolling tableView滚动 tableView 时最小化导航栏
【发布时间】:2016-05-31 16:03:40
【问题描述】:

我正在尝试实现与 instagram 在滚动浏览导航栏最小化的表格视图时使用的相同行为/功能。我对此进行了研究并利用了此处找到的解决方案:

Imitate iOS 7 Facebook hide/show expanding/contracting Navigation Bar

这个解决方案非常有用,但我遇到了问题。我在 tableView 的第 0 节中使用了节标题。当我向上滚动时,导航栏会隐藏,但 tableView 不会针对导航栏的变化调整其大小。当导航栏折叠时,这会留下一个空白,如下所示:

我在网上找到了其他各种文章,说这个问题与 tableView 的 contentInset 有关,但我找不到更多详细信息。如果有人对如何解决这个问题有任何建议,那就太棒了。

【问题讨论】:

  • 您是否尝试在UIScrollViewDelegate 方法中更新tableView 的框架?

标签: ios objective-c iphone uitableview


【解决方案1】:

我认为这就是你想要的,或者如果它是自定义导航栏,你可以将 tableView 的标题或行放在索引 0 处,你可以隐藏索引 0 处的标题行。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     if(scrollView.contentOffset.y <= distance)
     {
         //scrollup

         [navigationController setNavigationBarHidden: NO animated:YES];
     }
     else if(scrollView.contentOffset.y >= distance)
     {
        //scrolldown
            [self.navigationController.navigationBar setItems:nil];
            [navigationController setNavigationBarHidden: YES animated:YES];
         }

}

【讨论】:

    【解决方案2】:

    您使用 yourTable/scrollToRowAtIndexPath。 当转到 indexPath 差异第一行 - >隐藏导航 当转到第一行时 -> 显示导航

    UITableViewUIScrollView 的子类,table 的委托也可以作为滚动视图的委托。所以你可以为你的表使用来自UIScrollViewDelegate的所有方法(在表的委托中实现它们),例如

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    

    【讨论】:

      【解决方案3】:

      为什么不使用 UINavigationController 的新属性:hidesBarsOnSwipe

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-11
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-02-07
        • 2017-03-03
        • 2017-04-08
        • 1970-01-01
        相关资源
        最近更新 更多