UITabBar setScrollEdgeAppearance 没有可见的@interface

Posted

技术标签:

【中文标题】UITabBar setScrollEdgeAppearance 没有可见的@interface【英文标题】:No visible @interface for UITabBar setScrollEdgeAppearance 【发布时间】:2021-11-07 01:52:40 【问题描述】:

今天我在 Xcode 12 上遇到了问题。当我尝试 ios 15 版本的应用程序时,我注意到标签栏背景发生了变化。我通过添加这行代码解决了这个问题

if (@available(iOS 15.0, *)) 
    [[UITabBar appearance] setScrollEdgeAppearance:tabBarAppearance.appearance];

但是在我从 Xcode 13 换回 Xcode 12 后,我遇到了这个问题。

“UITabBar”没有可见的@interface 声明选择器“setScrollEdgeAppearance:”

对我来说似乎是 Xcode12 错误,但也许我错了。

编辑:添加了代码中的 if 语句

【问题讨论】:

它仅适用于 iOS 13 - UINavigationBarAppearance *scrollEdgeAppearance UI_APPEARANCE_SELECTOR API_AVAILABLE(ios(13.0)); 关于 xcode 构建失败的更多信息。当我切换到 xcode 13 时,一切正常。我只需要这条线用于 ios 15 但不能在 xcode 12 中构建它。 UINavigationBar 上的@Asperi scrollEdgeAppearanceUITabBar 上的scrollEdgeAppearance 不同。 UINavigationBar 从 iOS 13.0 开始就有了。 UITabBar 已在 iOS 15.0 中添加。 你需要做这个编译时间检查:***.com/a/68941618/2108547 是的,我在 xcode 12 的 UITabBar 中添加了空函数,它为我解决了问题 【参考方案1】:

我认为这是因为 scrollEdgeAppearance 只是 iOS UINavigationBar 的属性。自 iOS 15 以来,他们已将其扩展到所有其他导航栏

根据 Apple 文档:

在使用 iOS 14 或更早版本的应用上运行时,此属性适用 到带有大标题的导航栏。在 iOS 15 中,此属性适用 到所有导航栏。

【讨论】:

是的,我了解它的新属性/方法,我只需要 ios 15 版本。但是,如果我添加提到的行 xcode build failed 因为找不到方法。在 xcode 13 中一切正常。对我来说很奇怪,他们不支持使用该方法的 xcode 12。 那是因为 Xcode 12 不支持 iOS 15【参考方案2】:

它仅在 Xcode 13 中可用。所以我们这样做是为了解决问题并能够在 Xcode 12 和 13 上编译:

#if __clang_major__ >= 13
if (@available(iOS 15.0, *)) 
    [[UITabBar appearance] setScrollEdgeAppearance:tabBarAppearance.appearance];

#endif

【讨论】:

【参考方案3】:

在 swift-file 中唯一对我们有用的解决方案:

#if swift(>=5.5) // Only run on Xcode version >= 13 (Swift 5.5 was shipped first with Xcode 13).
        if #available(iOS 15.0, *) 
            UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance
        
#endif

那个 sn-p 确保它只使用 Xcode Version > 13 编译并且只在 iOS 15 上运行。Swift 5.5 是在 Xcode 13 中引入的。

【讨论】:

以上是关于UITabBar setScrollEdgeAppearance 没有可见的@interface的主要内容,如果未能解决你的问题,请参考以下文章

通过代码将 UITabBar 和 tabbaritems 添加到 UITabBar (注意:我不想实现 TabBarController )

如何将UITabBar嵌入故事板xcode中的另一个UITabBar

计算UITabBar的高度

返回UINavigationController时如何隐藏UITabBar

UITabbar 背景图像重复出现

OC和Swift中的UITabBar和UINaviGationBar的适配 [UITabbar在IPad中的适配]