I将我的最小部署目标从iOS 14.0降低到iOS 13.0。然后我得到了这个错误:
'navigationbartitle(_:displaymode :)'仅在iOS 14.0或newer
中可用
但文献表示,它可从iOS 13.0-14.2获得,以前的SOANSWERS也发布了(iOS 13是最新的)也使用了。
是因为我无法使用它是“弃用”的?但是,为什么我可以在iOS 14.0中使用它?Edit:
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)
}
}
呼叫的解决方案,那不是您链接的方法:
是:
func navigationBarTitle(_ title: Text, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
它无法解决第一个,因为您没有传递func navigationBarTitle<S>(_ title: S, displayMode: NavigationBarItem.TitleDisplayMode) -> some View where S : StringProtocol
作为标题,是吗?您将论点宣布为一个
Text
。 第二种方法的文档。从文档中,我们可以清楚地看到它可从iOS 14.0到14.2.使用字符串作为标题有效的原因(例如在
title
中)是因为您正在调用另一个OFLOACE
String
::
:
ContentView
符合func navigationBarTitle(_ titleKey: LocalizedStringKey, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
的符合,因此字符串文字可以传递给类型的参数,而不是像
LocalizedStringKey
的变量。
ITS,因为您正在为标题而不是文本视图使用字符串。
我遇到了与您相同的问题。
在iOS 14中,他们添加了直接将字符串直接放入您的导航栏的功能。在此之前,您必须使用
ExpressibleByStringLiteral
您需要使用
LocalizedStringKey
属性正确处理
title
贬值。为了简化这一点,我创建了一个Swift软件包,该软件包封装了几个SwiftUI修饰符的折旧处理逻辑,包括
.navigationBarTitle(Text(yourString), displayMode: .inline)
.,您可以在软件包中找到
navigationBarTitle
,该软件包可以在采用iOS 14及以后采用新的修饰符的同时,使您可以在不同的iOS版本上保持兼容性。