iOS 12.1上,从其它页面返回时,UITabBar按钮的跳动问题

这是iOS 12.1的一个bug,症状见下图:


iOS 12.1上,从其它页面返回时,UITabBar按钮的跳动问题_第1张图片
image

默认的UITabBar的isTranslucent(磨砂)为true,并且push viewController 时 设置hidesBottomBarWhenPushed = true,就会出现此问题。

将磨砂属性设置为false即可解决此问题:

tabBar.isTranslucent = false

但同时要注意,这样做之后,tabBar上面的这个tableView的底部依赖要做修正,不需要再减去tabBar的height了。比如,现在要这么写:

// 这里用了SnapKit库
tableView.snp.makeConstraints { (constraintMaker) in
    if #available(iOS 12.1, *) {
        // iOS 12.1, tabBar的isTranslucent设为false
        constraintMaker.bottom.equalToSuperview()
    } else {
        // iOS 12.1之前的版本,tabBar的isTranslucent仍设为true,所以要减去tabBarHeight
        constraintMaker.bottom.equalToSuperview().offset(0 - tabBarHeight)
    }
}

究其原因,可以查看参考链接2。原因是从其它页面返回时,tabBar 内的按钮 UITabBarButton 被设置了错误的 frame,frame.size 变为 (0, 0) 导致的。

参考:

  1. https://stackoverflow.com/questions/53084806/uitabbar-items-jumping-on-back-navigation-on-ios-12-1/
  2. https://github.com/ChenYilong/CYLTabBarController/commit/2c741c8bffd47763ad2fca198202946a2a63c4fc

你可能感兴趣的:(iOS 12.1上,从其它页面返回时,UITabBar按钮的跳动问题)