适配iPhone X Push过程中TabBar位置上移

来源:互联网 发布:在虚拟机安装mac系统 编辑:程序博客网 时间:2024/06/05 00:12

前言

就在刚刚GitHub有同学给我提了个Issue,说我的框架在iPhone X上跑有bug,Push新页面的时候TabBar会上移。开玩笑吧?我的框架怎么会有bug,这一定是个误会,于是我去iPhone X跑了一下,哎哟嘿,脸好疼

image.png
image.png

发现问题

来个慢动作:

iPhone X 不完美.gif
iPhone X 不完美.gif

上图可发现,点击跳转的时候,TabBar的确迅速上移了一段距离,没搞懂为啥,也许苹果别有用心,但我在心里还是骂了一下库克等人。

解决问题

UINavigationController的基类重写pushViewController代理方法,在Push的时候修正一下TabBarframe

- (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的需求。

修正完的效果:

iPhone X 完美.gif
iPhone X 完美.gif

iOS 超级码农交流群:538549344 技术大牛在等你来提问
以上属于臭码农原创,若有雷同属巧合,如有错误望指正,转载请标明来源和作者。by:臭码农



原创粉丝点击