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

场景

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

需要

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

问题

有人知道怎么做吗?

【问题讨论】:

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

标签: ios uitableview uinavigationcontroller uitabbarcontroller


【解决方案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+。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多