UITableView:在向上滑动时收缩选项卡栏和导航栏

3

场景

我有一个应用程序,使用了底部的选项卡控制器(Tab Bar Controller)和顶部的导航控制器(Navigation Controller)UI设计。在一个视图控制器上,我有一个UITableView,用户将通过“向上滑动”来滚动表格以查看内容。

需求

与Yahoo!和Instagram应用程序类似,当检测到用户在tableView上向上滑动时,我希望能够使顶部导航栏和底部选项卡“缩小”和“消失”。当用户再次向下滑动时,我希望它们都重新出现。

问题

有人知道如何做到这一点吗?


你看到这个答案了吗:https://dev59.com/QWIj5IYBdhLWcg3w24kF - Claudio
你好@Claudio感谢您的回复。我看到了并且已经在我的应用程序中使其工作了。问题是,当我的导航控制器在导航栏仍然隐藏的情况下推到另一个屏幕时,它会在下一个屏幕中保持隐藏状态。您知道如何恢复导航控制器吗? - Brandon A
在创建每个UIViewController时,在viewDidAppear中重新设置tabBar/navigationBar框架的位置。它应该可以正常工作。我只是现在不记得导航栏和选项卡栏的确切高度是多少。 - Claudio
1个回答

1
为了隐藏包含UITableViewControllerUINavigationControllerUITabbarControllerUITabbar,应该使用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被释放之前,删除选择器非常重要。否则,在下一次使用barHideOnSwipeGestureRecognizer时,将保证崩溃,并且带有self.navigationController

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接