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
被释放之前移除选择器非常重要。否则,您将在下次使用 barHideOnSwipeGestureRecognizer
和 self.navigationController
时保证崩溃。
请注意,此方法仅适用于 ios8+。
【讨论】:
以上是关于UITableView:向上滑动时收缩标签栏和导航栏的主要内容,如果未能解决你的问题,请参考以下文章
导航栏和它的titleView rightBarButtonItem随着动画变得更小
触发 UITextField 时同步向上滑动 UIView 并调整 UITableView 的大小
操作栏和导航抽屉 - 使用 Activity/Fragment 滑动操作栏