Swift 隐藏UITabBar替换为自定义视图底部黑条问题如何解决
UITabBar隐藏后底部黑条问题解决思路
问题根因
隐藏UITabBar后底部出现黑条是两个布局问题共同导致的:
- 仅设置
UITabBar.isHidden = true时,系统仍会为TabBar预留底部布局空间,当前子控制器的View默认不会延伸到屏幕最底部 - 你将
PopViewController的View添加到了ProjectGridViewController的View上,父View本身底部就未覆盖原TabBar的区域,子View自然无法延伸到对应位置
解决步骤
- 步骤1:调整控制器布局延伸属性
在ProjectGridViewController的viewDidLoad方法中添加如下配置,让控制器View可以延伸到原TabBar所在区域:
edgesForExtendedLayout = .all extendedLayoutIncludesOpaqueBars = true automaticallyAdjustsScrollViewInsets = true
- 步骤2:修改PopViewController的父容器逻辑
不要将PopVC的View添加到当前子控制器的View上,改为添加到UITabBarController的View层级,确保View可以覆盖整个屏幕:
修改eyeBtnPressed代码如下:
@objc func eyeBtnPressed() { let popUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopViewController") as! PopViewController guard let parentTabVC = self.tabBarController else { return } parentTabVC.addChild(popUpVC) popUpVC.view.frame = parentTabVC.view.bounds parentTabVC.view.addSubview(popUpVC.view) popUpVC.didMove(toParent: parentTabVC) }
- 步骤3:优化动画代码(可选)
你当前的moveIn方法中存在重复赋值问题,缩放动画实际不会生效,可修改为如下代码:
func moveIn() { self.tabBarController?.tabBar.isHidden = true // 设置动画初始状态 self.view.transform = CGAffineTransform(scaleX: 1.35, y: 1.35) self.view.alpha = 0.0 UIView.animate(withDuration: 0.24) { // 设置动画结束状态 self.view.transform = .identity self.view.alpha = 1.0 } }
- 步骤4:自定义视图适配TabBar位置(可选)
如果需要橙色自定义视图完全替换原TabBar的位置,可直接将自定义视图作为子View添加到UITabBarController中,和系统TabBar同层级,隐藏系统TabBar时直接显示自定义视图,约束对齐原TabBar的位置即可,无需依赖子控制器的布局。
内容的提问来源于stack exchange,提问作者iosDevSan
相关产品推荐
相关产品推荐

