SwiftUI 无法在 iOS 13 版本中使用 navigationBarTitle 修饰符(已弃用),但可以在 iOS 14 中使用

ahe*_*eze 5 xcode deprecated ios swift swiftui

我将最低部署目标从 iOS 14.0 降低到 iOS 13.0。然后我得到了这个错误:

'navigationBarTitle(_:displayMode:)' 仅适用于 iOS 14.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.


Xax*_*xus 7

这是因为您使用的是字符串作为标题而不是文本视图。

我遇到了和你一样的问题。

基本上在 iOS 14 中,他们添加了将字符串直接放入导航栏的功能。在此之前,您必须使用.navigationBarTitle(Text(yourString), displayMode: .inline)