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

如何全局设置Toolbar Items的ImageInsets属性?

解决TabBarItem图片内边距无法全局设置的问题

我之前也碰到过一模一样的坑!一开始想在AppDelegate里直接给TabBar的Item设置图片内边距,写了这段代码:

self.window?.rootViewController?.tabBarController?.toolbarItems![0].imageInsets.top = 5.0 
self.window?.rootViewController?.tabBarController?.toolbarItems![1].imageInsets.top = 5.0 

结果运行后完全没效果,查了半天发现这时候tabBarController还是nil,根本拿不到实例。

没办法,只能退而求其次,在第一个视图控制器的viewDidLoad里给自己的TabBarItem设置属性,这时候倒是能生效:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tabBarItem.imageInsets.top = 5.0 
}

但新问题又来了——第二个视图控制器在用户点击对应的TabBar按钮之前根本不会加载,所以它的TabBarItem属性没法提前设置,导致切换过去的时候样式不一致。

推荐的解决办法

其实我们可以直接在UITabBarController的子类里做全局配置,这样不管子控制器有没有被加载,都能统一设置所有TabBarItem的样式:

  1. 先创建一个自定义的UITabBarController子类,比如叫MainTabBarController
  2. 在这个子类的viewDidLoad方法里,遍历所有子控制器,统一设置图片内边距:
class MainTabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 遍历所有子控制器,给每个tabBarItem设置统一的内边距
        viewControllers?.forEach { viewController in
            viewController.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
        }
    }
}

这样只要TabBarController完成初始化,所有对应的TabBarItem就都会被设置好属性,不用等到子控制器加载,完美解决了之前的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:59:16