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

问题描述 投票:0回答:1

场景

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

需要

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

问题

有人知道该怎么做吗?

ios objective-c uitableview uinavigationcontroller uitabbarcontroller
1个回答
1
投票

要隐藏堆栈中包含

UITabbar
UITabbarController
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
barHideOnSwipeGestureRecognizer
时肯定会崩溃。

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

© www.soinside.com 2019 - 2024. All rights reserved.