You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS双Tab Bar重定位后原位置黑块问题解决求助

解决iOS TabBar移到顶部后底部出现黑块的问题

兄弟,我太懂这种踩坑的感觉了!你遇到的这个底部黑块,本质是UITabBarController默认自带的TabBar在搞事情——要么是你用了自定义TabBar但没处理系统原生的,要么是移动位置后系统的布局约束还在留着占位。下面给你几个靠谱的解决办法:


方法1:隐藏系统原生TabBar+调整布局(适合用自定义TabBar的情况)

从你的代码看,你已经拖了一个自定义的bar作为IBOutlet,那大概率是系统原来的TabBar还在底部躺着,只是被你忽略了。直接把它藏起来,再让控制器的视图铺满整个屏幕就行:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 1. 藏起系统自带的TabBar
    self.tabBar.isHidden = true
    
    // 2. 让控制器的视图延伸到屏幕底部,干掉原来TabBar的占位
    self.extendedLayoutIncludesOpaqueBars = true
    self.edgesForExtendedLayout = .all
    
    // 3. 保险起见,给控制器的view设置背景色(避免露出黑色)
    self.view.backgroundColor = .white
}

方法2:直接移动系统TabBar(不用自定义的情况)

如果你不想搞自定义TabBar,直接改系统TabBar的位置就行,同时调整安全区域避免内容被挡住:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    
    guard let tabBar = self.tabBar else { return }
    // 把TabBar移到导航栏下方(如果没有导航栏就设为0)
    let topY = self.navigationController?.navigationBar.frame.maxY ?? 0
    tabBar.frame = CGRect(x: 0, y: topY, width: tabBar.frame.width, height: tabBar.frame.height)
    
    // 调整安全区域,让子控制器的内容避开顶部的TabBar
    self.additionalSafeAreaInsets = UIEdgeInsets(top: tabBar.frame.height, left: 0, bottom: 0, right: 0)
    
    // 让视图延伸到底部,消除底部占位黑块
    self.extendedLayoutIncludesOpaqueBars = true
}

注意点

  • 别直接用frame硬改布局(除非在viewWillLayoutSubviews里),AutoLayout会偷偷把位置改回去,最好用约束来固定自定义TabBar的位置
  • 如果是Storyboard里拖的自定义TabBar,要确保它的约束是绑在顶部/导航栏底部,而不是底部

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:27:22