UITableView:向上滑动时收缩标签栏和导航栏

Posted

技术标签:

【中文标题】UITableView:向上滑动时收缩标签栏和导航栏【英文标题】:UITableView: Shrink Tab Bar and Navigation Bar on Swipe up 【发布时间】:2014-08-11 16:16:40 【问题描述】:

场景

我有一个应用程序使用标签栏控制器(屏幕底部)和导航控制器(屏幕顶部)UI 设计。在一个视图控制器上,我有一个 UITableView,其中包含用户将“向上滑动”以滚动表格以查看内容的内容。

需要

很像雅虎!和 Instagram 应用程序,我希望能够让顶部导航栏和底部标签栏在感觉到用户在 tableView 上向上滑动时“缩小”和“消失”。当然,当用户再次向下滑动时,我希望它们都重新出现。

问题

有人知道怎么做吗?

【问题讨论】:

你看到这个答案了吗:***.com/questions/19819165/… 您好@Claudio 感谢您的回复。我确实看到了,我让它在我的应用程序中工作。问题是,当我的导航控制器推送到另一个屏幕时导航栏仍处于隐藏状态,它仍然隐藏在下一个屏幕中。你知道如何把导航控制器带回来吗? 在您创建的每个 UIViewController 的 viewDidAppear 上重新设置 tabBar/navigationBar 框架的位置。它应该可以正常工作。我只是现在不记得现在导航和标签栏的确切高度是多少 【参考方案1】:

要隐藏UITabbarController 中的UITabbar,其中包含UINavigationController 和堆栈中的UITableViewController,应使用hidesBarsOnSwipe 属性并为barHideOnSwipeGestureRecognizer 添加自定义选择器:

@implementation SomeTableViewController

- (void)willMoveToParentViewController:(UIViewController *)parent

    if (parent) 
        self.navigationController.hidesBarsOnSwipe = YES;
        [self.navigationController.barHideOnSwipeGestureRecognizer addTarget:self action:@selector(swipe:)];
    
    else 
        self.navigationController.hidesBarsOnSwipe = NO;
        [self.navigationController.barHideOnSwipeGestureRecognizer removeTarget:self action:@selector(swipe:)];
    


- (void)swipe:(UIPanGestureRecognizer *)recognizer

    UINavigationBar *bar = self.navigationController.navigationBar;

    BOOL isHidden = (bar.frame.origin.y < 0);

    [self.tabBarController.tabBar setHidden:isHidden];

    [[UIApplication sharedApplication] setStatusBarHidden:isHidden withAnimation:UIStatusBarAnimationSlide];

通过这种方式可以隐藏标签栏和状态栏。也可以添加一些动画效果来隐藏/显示这些条。

self 被释放之前移除选择器非常重要。否则,您将在下次使用 barHideOnSwipeGestureRecognizerself.navigationController 时保证崩溃。

请注意,此方法仅适用于 ios8+。

【讨论】:

以上是关于UITableView:向上滑动时收缩标签栏和导航栏的主要内容,如果未能解决你的问题,请参考以下文章

导航栏和它的titleView rightBarButtonItem随着动画变得更小

UITableview下的滑动工具栏

触发 UITextField 时同步向上滑动 UIView 并调整 UITableView 的大小

操作栏和导航抽屉 - 使用 Activity/Fragment 滑动操作栏

React - 向下滚动时向上滑动固定导航栏,向上滚动时向下滑动

iOS 7,状态栏和导航栏:像 Reeder 一样使用侧面板隐藏或滑动