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 scrollEdgeAppearance
与UITabBar
上的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