Xcode12报No visible @interface for UITabBar setScrollEdgeAppearance如何解决
问题原因
这不是Xcode 12的bug,是iOS SDK版本匹配的正常逻辑:
scrollEdgeAppearance是iOS 15新增的UITabBar属性,只有Xcode 13及以上版本内置的iOS 15+ SDK才包含该属性的头文件声明- Xcode 12最高仅内置iOS 14 SDK,编译阶段识别不到iOS 15新增的API接口,即使你已经添加了
@available运行时版本判断,也会因为SDK中没有对应方法声明,直接报找不到selector的错误。
解决方案
根据你的使用场景选择对应方案即可:
场景1:需要长期同时在Xcode 12和Xcode 13上编译项目
添加编译宏判断当前使用的SDK版本,仅当使用iOS 15及以上SDK编译时才保留适配代码:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 if (@available(iOS 15.0, *)) { [[UITabBar appearance] setScrollEdgeAppearance:tabBarAppearance.appearance]; } #endif
该宏会在编译环境SDK版本低于iOS 15(也就是Xcode 12的场景)时,直接将这段适配代码排除在编译流程外,避免报错;Xcode 13及以上版本编译时会正常保留代码,运行时版本判断逻辑也会正常生效。
场景2:仅临时切回Xcode 12排查问题,日常开发以Xcode 13为主
临时注释掉这段iOS 15适配代码,切回Xcode 13时再取消注释即可。
内容的提问来源于stack exchange,提问作者Roman Varga
相关产品推荐
相关产品推荐

