首页 > 解决方案 > 如何覆盖目标平台中不可用但在 Base SDK 中可用的方法

问题描述

我正在尝试添加对新 iOS 设备的支持,同时保持与旧设备的兼容性。使用 Xcode 11.1,我将目标 iOS 平台设置为 9.3,一般 -> 部署信息 -> 目标。

在 Build Settings 中,Base SDK 只是说 iOS,所以我假设它始终是 Xcode 支持的最新版本。

我试图让 Home Indicator 在 iPhoneX 和 11 中消失,但为此你必须重写此方法,

override func prefersHomeIndicatorAutoHidden() -> Bool
{
    return true
}

但是,我收到此构建错误:

Method does not override any method from its superclass

我尝试使用这样的@available语法,

@available(iOS 11.0, *)
override func prefersHomeIndicatorAutoHidden() -> Bool
{
    return true
}

但我得到了同样的构建错误。如果我检查该方法的快速帮助,它并不指向 Apple 的文档,而在另一个目标设置为 iOS 11 的游戏中,快速帮助确实指向正确的位置。

我不想将目标更改为较新的目标,因为这会破坏与旧手机的兼容性。这是硬编码Base SDK还是什么的问题?

编辑:

我接受第一个答案是有效的,但我想我会写下一些澄清,以防其他人陷入类似的困境:

标签: iosswift

解决方案


正如@Starsky 指出的那样,

@available(iOS 11.0, *)
override var prefersHomeIndicatorAutoHidden: Bool {
        return true
}

推荐阅读