ahe*_*eze 5 xcode deprecated ios swift swiftui
我将最低部署目标从 iOS 14.0 降低到 iOS 13.0。然后我得到了这个错误:
'navigationBarTitle(_:displayMode:)' 仅适用于 iOS 14.0 或更新版本
但是,文档说它可以从 iOS 13.0-14.2 获得,并且之前发布的SO答案(回到 iOS 13 是最新版本时)也使用了它。
是不是因为它“已弃用”而无法使用它?但是为什么我可以在 iOS 14.0 中使用它呢?
尝试复制后,它似乎只有在我没有title
存储在属性中时才有效。
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hi!")
.navigationBarTitle("Title", displayMode: .inline)
}
}
struct DetailView: View {
var title: String = ""
var body: some View {
Text("Hi!")
.navigationBarTitle(title, displayMode: .inline)
}
}
Run Code Online (Sandbox Code Playgroud)
Swe*_*per 10
如果您仔细查看navigationBarTitle
调用解析的内容,则它不是您链接的方法:
func navigationBarTitle(_ title: Text, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
Run Code Online (Sandbox Code Playgroud)
这是:
func navigationBarTitle<S>(_ title: S, displayMode: NavigationBarItem.TitleDisplayMode) -> some View where S : StringProtocol
Run Code Online (Sandbox Code Playgroud)
它无法解析为第一个,因为您没有将 aText
作为标题传递,是吗?您将参数声明title
为 a String
。
这是第二种方法的文档。从文档中我们可以清楚地看到它从 iOS 14.0 到 14.2 可用。
为什么使用字符串文字作为标题的作品(如原因ContentView
)是因为你调用另一个超载的navigationBarTitle
:
func navigationBarTitle(_ titleKey: LocalizedStringKey, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
Run Code Online (Sandbox Code Playgroud)
LocalizedStringKey
符合ExpressibleByStringLiteral
,因此字符串文字可以传递给类型为 的参数LocalizedStringKey
,但不能传递给title
.
这是因为您使用的是字符串作为标题而不是文本视图。
我遇到了和你一样的问题。
基本上在 iOS 14 中,他们添加了将字符串直接放入导航栏的功能。在此之前,您必须使用.navigationBarTitle(Text(yourString), displayMode: .inline)