适配iPhone X Push过程中TabBar位置上移
来源:互联网 发布:在虚拟机安装mac系统 编辑:程序博客网 时间:2024/06/05 00:12
前言
就在刚刚GitHub
有同学给我提了个Issue
,说我的框架在iPhone X
上跑有bug,Push
新页面的时候TabBar
会上移。开玩笑吧?我的框架怎么会有bug,这一定是个误会,于是我去iPhone X跑了一下,哎哟嘿,脸好疼
发现问题
来个慢动作:
上图可发现,点击跳转的时候,TabBar
的确迅速上移了一段距离,没搞懂为啥,也许苹果别有用心,但我在心里还是骂了一下库克
等人。解决问题
在UINavigationController
的基类重写pushViewController
代理方法,在Push的时候修正一下TabBar
的frame
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ if (self.viewControllers.count > 0) { viewController.hidesBottomBarWhenPushed = YES; } [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;}
其他跳动问题解决
在继承于系统UITabBar
的子类加上下面代码
#import "XYTabBar.h"@interface XYTabBar()@property (nonatomic,assign)UIEdgeInsets oldSafeAreaInsets;@end@implementation XYTabBar- (void) safeAreaInsetsDidChange{ [super safeAreaInsetsDidChange]; if(self.oldSafeAreaInsets.left != self.safeAreaInsets.left || self.oldSafeAreaInsets.right != self.safeAreaInsets.right || self.oldSafeAreaInsets.top != self.safeAreaInsets.top || self.oldSafeAreaInsets.bottom != self.safeAreaInsets.bottom) { self.oldSafeAreaInsets = self.safeAreaInsets; [self invalidateIntrinsicContentSize]; [self.superview setNeedsLayout]; [self.superview layoutSubviews]; } }- (CGSize) sizeThatFits:(CGSize) size{ CGSize s = [super sizeThatFits:size]; if(@available(iOS 11.0, *)) { CGFloat bottomInset = self.safeAreaInsets.bottom; if( bottomInset > 0 && s.height < 50) { s.height += bottomInset; } } return s;}@end
注意:
如果你的TabBar是非继承自UITabbar的,而是自定义UIView 然后 addSubView到系统的TabBar里的,那上面方法可能无效,之前我的框架就是个UIView,奇葩问题太多,建议要么继承于系统的,要么完全自己实现底部整个TabBar。目前系统提供的UITabbar也不错的,通过重写来支持自定义样式,可以满足大部分APP的需求。
修正完的效果:
iOS 超级码农交流群:538549344 技术大牛在等你来提问
以上属于臭码农原创,若有雷同属巧合,如有错误望指正,转载请标明来源和作者。by:臭码农
前言
就在刚刚GitHub
有同学给我提了个Issue
,说我的框架在iPhone X
上跑有bug,Push
新页面的时候TabBar
会上移。开玩笑吧?我的框架怎么会有bug,这一定是个误会,于是我去iPhone X跑了一下,哎哟嘿,脸好疼
发现问题
来个慢动作:
上图可发现,点击跳转的时候,
TabBar
的确迅速上移了一段距离,没搞懂为啥,也许苹果别有用心,但我在心里还是骂了一下库克
等人。解决问题
在UINavigationController
的基类重写pushViewController
代理方法,在Push的时候修正一下TabBar
的frame
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ if (self.viewControllers.count > 0) { viewController.hidesBottomBarWhenPushed = YES; } [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;}
其他跳动问题解决
在继承于系统UITabBar
的子类加上下面代码
#import "XYTabBar.h"@interface XYTabBar()@property (nonatomic,assign)UIEdgeInsets oldSafeAreaInsets;@end@implementation XYTabBar- (void) safeAreaInsetsDidChange{ [super safeAreaInsetsDidChange]; if(self.oldSafeAreaInsets.left != self.safeAreaInsets.left || self.oldSafeAreaInsets.right != self.safeAreaInsets.right || self.oldSafeAreaInsets.top != self.safeAreaInsets.top || self.oldSafeAreaInsets.bottom != self.safeAreaInsets.bottom) { self.oldSafeAreaInsets = self.safeAreaInsets; [self invalidateIntrinsicContentSize]; [self.superview setNeedsLayout]; [self.superview layoutSubviews]; } }- (CGSize) sizeThatFits:(CGSize) size{ CGSize s = [super sizeThatFits:size]; if(@available(iOS 11.0, *)) { CGFloat bottomInset = self.safeAreaInsets.bottom; if( bottomInset > 0 && s.height < 50) { s.height += bottomInset; } } return s;}@end
注意:
如果你的TabBar是非继承自UITabbar的,而是自定义UIView 然后 addSubView到系统的TabBar里的,那上面方法可能无效,之前我的框架就是个UIView,奇葩问题太多,建议要么继承于系统的,要么完全自己实现底部整个TabBar。目前系统提供的UITabbar也不错的,通过重写来支持自定义样式,可以满足大部分APP的需求。
修正完的效果:
iOS 超级码农交流群:538549344 技术大牛在等你来提问
以上属于臭码农原创,若有雷同属巧合,如有错误望指正,转载请标明来源和作者。by:臭码农
阅读全文
0 0
- 适配iPhone X Push过程中TabBar位置上移
- 适配 iPhone X Push 过程中 TabBar 位置上移
- 适配 iPhone X Push 过程中 TabBar 位置上移
- 适配iPhone X Push过程中TabBar位置上移
- 适配iPhone X Push过程中TabBar位置上移
- 解决iPhoneX push过程中tabbar上移的问题
- iPhone X在push时tabBar往上偏移的问题
- 解决iPhoneX push时tabbar上移的bug
- iPhone中如何自定义tabbar
- 滑动过程中隐藏tabBar
- push时隐藏tabbar
- push时,隐藏TabBar
- iphone push
- iPhone Push
- iphone开发中TabBar里嵌套使用NavigationBar的方法
- 环信push隐藏tabBar
- iPhone 自定义tabbar
- ios tabbar 文字位置
- 删除数组中重复元素
- Nexus私服的搭建
- 关于"Uncaught TypeError: Cannot read property 'time' of null"的处理
- Java锁的种类以及辨析(三):阻塞锁
- java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 34 path
- 适配iPhone X Push过程中TabBar位置上移
- ceph IO切割成对象和对象名的组成
- 微图App有哪些实用的功能?
- 用户行为日志-js埋点(四)可能存在的问题和总结
- Lambda表达式小例子
- JVM之类加载过程(二)
- 自定义Win7虚拟机的睡眠时间
- 安卓JAVA將table導出成PDF
- 一些常用的Linux命名