场景
我有一个应用程序,它使用标签栏控制器(屏幕底部)和导航控制器(屏幕顶部)UI 设计。在一个视图控制器上,我有一个 UITableView,其中包含用户将“向上滑动”以滚动表格以查看内容的内容。
需要
很像雅虎!和 Instagram 应用程序,我希望能够在感知到用户在 tableView 上向上滑动时让顶部导航栏和底部选项卡栏“收缩”并“消失”。当然,当用户再次向下滑动时,我希望它们都重新出现。
问题
有人知道该怎么做吗?
要隐藏堆栈中包含
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+。