iOS15系统下应用CoreFoundation/UIKit框架TabBar相关崩溃求助
问题根因
这个是iOS15系统UITabBar的已知适配问题:iOS15对UITabBar的渲染逻辑做了重构,旧版本直接调用setBackgroundImage:方法或者在Storyboard中直接配置TabBar背景图时,如果图片的拉伸参数、alpha通道不符合系统新的渲染要求,会触发系统内部生成位图上下文失败,进而尝试Retain空对象导致野指针崩溃,和你给出的堆栈日志、控制台输出完全匹配。
解决方案
- 废弃旧的直接设置背景图的方式,统一使用iOS13及以上推出的
UITabBarAppearanceAPI配置TabBar外观,代码示例如下:
Objective-C版本
Swift版本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]]; }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
相关产品推荐
相关产品推荐

