这是iOS 12.1的一个bug,症状见下图:
默认的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) 导致的。
参考: