SwiftUI 在 iOS 13 版本中不能使用 navigationBarTitle 修饰符(已弃用),但在 iOS 14 中可以
SwiftUI can't use navigationBarTitle modifier (deprecated) in iOS 13 versions, but can in iOS 14
我将我的最低部署目标从 iOS 14.0 降低到 iOS 13.0。然后我得到了这个错误:
'navigationBarTitle(_:displayMode:)' is only available in iOS 14.0 or newer
但是,documentation says it's available from iOS 13.0-14.2, and previous SO answers 发布的(回到 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)
}
}
如果您仔细查看 navigationBarTitle
调用的解析结果,它不是您链接的方法:
func navigationBarTitle(_ title: Text, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
是:
func navigationBarTitle<S>(_ title: S, displayMode: NavigationBarItem.TitleDisplayMode) -> some View where S : StringProtocol
无法解析为第一个,因为您没有传递 Text
作为标题,是吗?您将参数 title
声明为 String
.
Here's 第二种方法的文档。从文档中我们可以清楚地看到它在 iOS 14.0 到 14.2 之间可用。
之所以使用字符串文字作为标题有效(例如在 ContentView
中)是因为您正在调用 navigationBarTitle
的 yet another overload:
func navigationBarTitle(_ titleKey: LocalizedStringKey, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
LocalizedStringKey
符合 ExpressibleByStringLiteral
,因此字符串文字可以传递给类型 LocalizedStringKey
的参数,但不能传递给 title
.[=26= 这样的变量]
这是因为您在标题中使用的是字符串而不是文本视图。
我 运行 遇到了和你一样的问题。
基本上在 iOS 14 中,他们添加了将字符串直接放入导航栏的功能。在此之前,您必须使用 .navigationBarTitle(Text(yourString), displayMode: .inline)
我将我的最低部署目标从 iOS 14.0 降低到 iOS 13.0。然后我得到了这个错误:
'navigationBarTitle(_:displayMode:)' is only available in iOS 14.0 or newer
但是,documentation says it's available from iOS 13.0-14.2, and previous SO answers 发布的(回到 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)
}
}
如果您仔细查看 navigationBarTitle
调用的解析结果,它不是您链接的方法:
func navigationBarTitle(_ title: Text, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
是:
func navigationBarTitle<S>(_ title: S, displayMode: NavigationBarItem.TitleDisplayMode) -> some View where S : StringProtocol
无法解析为第一个,因为您没有传递 Text
作为标题,是吗?您将参数 title
声明为 String
.
Here's 第二种方法的文档。从文档中我们可以清楚地看到它在 iOS 14.0 到 14.2 之间可用。
之所以使用字符串文字作为标题有效(例如在 ContentView
中)是因为您正在调用 navigationBarTitle
的 yet another overload:
func navigationBarTitle(_ titleKey: LocalizedStringKey, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
LocalizedStringKey
符合 ExpressibleByStringLiteral
,因此字符串文字可以传递给类型 LocalizedStringKey
的参数,但不能传递给 title
.[=26= 这样的变量]
这是因为您在标题中使用的是字符串而不是文本视图。
我 运行 遇到了和你一样的问题。
基本上在 iOS 14 中,他们添加了将字符串直接放入导航栏的功能。在此之前,您必须使用 .navigationBarTitle(Text(yourString), displayMode: .inline)