iOS开发: 解决iPhoneX模拟器上push过程中tabBa
2017-09-21 本文已影响1615人
伯wen
提示: 本篇以Swift代码讲解, 最下面为OC代码, 如果有问题请留言
问题描述
-
当在iPhoneX模拟器上运行程序时, 如果在push的时候设置了控制器的hidesBottomBarWhenPushed属性为true, 那么push过程中有如下效果:
tabBar上移问题 - 图中可以发现, push过程中隐藏tabBar会导致tabBar上移一段距离
解决思路
- 问题出现是在push过程中, 所以我们只需要拦截push过程即可, 即重写push方法, 并调整tabBar的位置
- 第一步: 自定义导航控制器, 重写push方法(项目中大家基本都会这么做)
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
super.pushViewController(viewController, animated: animated)
}
- 第二步: 设置push控制器的hidesBottomBarWhenPushed为true
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
if childViewControllers.count > 0 {
// push时隐藏tabBar
viewController.hidesBottomBarWhenPushed = true
}
super.pushViewController(viewController, animated: animated)
}
- 第三步: 在spuer之后修改tabBar的frame
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
if childViewControllers.count > 0 {
// push时隐藏tabBar
viewController.hidesBottomBarWhenPushed = true
}
super.pushViewController(viewController, animated: animated)
// 获取tabBar的frame, 如果没有直接返回
guard var frame = self.tabBarController?.tabBar.frame else {
return
}
// 设置frame的y值, y = 屏幕高度 - tabBar高度
frame.origin.y = UIScreen.main.bounds.size.height - frame.size.height
// 修改tabBar的frame
self.tabBarController?.tabBar.frame = frame
}
最后效果
-
push过程中, 隐藏tabBar, 并且tabBar位置不变
push过程中, 隐藏tabBar, 并且tabBar位置不变
OC版本代码如下:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.childViewControllers.count > 0) {
// push过程中隐藏tabBar
viewController.hidesBottomBarWhenPushed = YES;
}
// 重写super
[super pushViewController:viewController animated:animated];
// 修改tabBra的frame
CGRect frame = self.tabBarController.tabBar.frame;
frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.size.height;
self.tabBarController.tabBar.frame = frame;
}