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

iOS15系统下应用CoreFoundation/UIKit框架TabBar相关崩溃求助

问题根因

这个是iOS15系统UITabBar的已知适配问题:iOS15对UITabBar的渲染逻辑做了重构,旧版本直接调用setBackgroundImage:方法或者在Storyboard中直接配置TabBar背景图时,如果图片的拉伸参数、alpha通道不符合系统新的渲染要求,会触发系统内部生成位图上下文失败,进而尝试Retain空对象导致野指针崩溃,和你给出的堆栈日志、控制台输出完全匹配。

解决方案
  • 废弃旧的直接设置背景图的方式,统一使用iOS13及以上推出的UITabBarAppearanceAPI配置TabBar外观,代码示例如下:
    Objective-C版本
    if (@available(iOS 13.0, *)) {
        UITabBarAppearance *appearance = [[UITabBarAppearance alloc] init];
        // 配置背景图
        [appearance setBackgroundImage:[UIImage imageNamed:@"your_tabbar_bg"]];
        // 可同时配置阴影、选中态等其他属性
        appearance.shadowImage = [UIImage new];
        // 分别赋值给standardAppearance和scrollEdgeAppearance
        self.tabBar.standardAppearance = appearance;
        if (@available(iOS 15.0, *)) {
            self.tabBar.scrollEdgeAppearance = appearance;
        }
    } else {
        // iOS13以下沿用旧的设置逻辑
        [self.tabBar setBackgroundImage:[UIImage imageNamed:@"your_tabbar_bg"]];
        [self.tabBar setShadowImage:[UIImage new]];
    }
    
    Swift版本
    if #available(iOS 13.0, *) {
        let appearance = UITabBarAppearance()
        appearance.backgroundImage = UIImage(named: "your_tabbar_bg")
        appearance.shadowImage = UIImage()
        tabBar.standardAppearance = appearance
        if #available(iOS 15.0, *) {
            tabBar.scrollEdgeAppearance = appearance
        }
    } else {
        tabBar.backgroundImage = UIImage(named: "your_tabbar_bg")
        tabBar.shadowImage = UIImage()
    }
    
  • 如果你之前是在Storyboard/Xib中配置的TabBar背景图,需要先将Storyboard中对应的背景图配置项清空,全部改为用上述代码动态配置。
  • 检查使用的TabBar背景图资源:确认图片尺寸和当前设备的屏幕倍率匹配,不要使用大小为0的占位图,也不要使用不含alpha通道的JPG格式图片作为半透明背景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:48:03