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

如何禁用UITabBarController的moreNavigationController中的部分标签?

解决方案

问题原因

你之前的代码错误访问了moreNavigationController.toolbarItems,这个属性是More页面底部工具栏的条目,不是你要修改的顶部列表中的标签条目,所以获取结果为nil。
你在Storyboard中设置的禁用属性不生效,是因为系统加载TabBar控制器时,会优先使用运行时属性覆盖Storyboard的部分配置,直接通过代码修改优先级更高。

可行实现步骤

UITabBarController的viewControllers属性包含了所有绑定的标签子控制器,不管是显示在底部标签栏还是More列表中,每个子控制器的tabBarItem属性就是对应标签的配置实例,直接修改其isEnabled属性即可同步作用于底部标签栏和More列表。
你的场景下共7个标签,前4个为底部显示标签,第5、第6个(对应数组索引4、5)就是More列表的前2个待禁用标签,按如下方式操作即可:

  1. 给当前使用的UITabBarController创建自定义子类(不需要修改原有业务逻辑,仅重写生命周期方法即可)
  2. 在子类的viewDidLoad方法中添加禁用逻辑,代码示例:
class CustomTabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 校验子控制器数量是否符合预期
        guard let allVCs = viewControllers, allVCs.count >= 6 else { return }
        // 禁用More列表第一个标签
        allVCs[4].tabBarItem.isEnabled = false
        // 禁用More列表第二个标签
        allVCs[5].tabBarItem.isEnabled = false
    }
}
  1. 回到Storyboard,选中你的UITabBarController,在身份检查器中将自定义类改为你创建的CustomTabBarController。

修改后这两个标签在More列表中会自动显示为灰色,用户点击后不会触发任何跳转,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:00