SwiftUI 在 iOS 13 版本中不能使用 navigationBarTitle 修饰符(已弃用),但在 iOS 14 中可以
Posted
技术标签:
【中文标题】SwiftUI 在 iOS 13 版本中不能使用 navigationBarTitle 修饰符(已弃用),但在 iOS 14 中可以【英文标题】:SwiftUI can't use navigationBarTitle modifier (deprecated) in iOS 13 versions, but can in iOS 14 【发布时间】:2020-11-06 03:09:58 【问题描述】:我将最低部署目标从 ios 14.0 降低到 iOS 13.0。然后我得到了这个错误:
'navigationBarTitle(_:displayMode:)' 仅适用于 iOS 14.0 或更高版本
但是,documentation 表示它在 iOS 13.0-14.2 中可用,并且之前发布的 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()
已被弃用并被 .navigationTitle()
取代
你使用哪个 Xcode 版本?
@Asperi 12.1 (12A7403)。
@Sweeper 1. 创建新的 SwiftUI 项目,2. 将最小部署目标降低到 13.0,3. 替换ContentView
和 struct ContentView: View var title: String = ""; var body: some View Text("Hello, world!").navigationBarTitle(title, displayMode: .inline)
嗯,如果我删除 title
属性似乎可以工作。当我添加它时,错误又回来了。见imgur.com/a/rfRCGYn。我编辑了我的帖子
【参考方案1】:
这是因为您使用的是字符串而不是文本视图。
我遇到了和你一样的问题。
基本上在 iOS 14 中,他们添加了直接将字符串拖放到导航栏中的功能。在此之前,您必须使用.navigationBarTitle(Text(yourString), displayMode: .inline)
【讨论】:
是的!有点愚蠢的错误。【参考方案2】:如果您仔细查看 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
中)是因为您调用的是yet another overload of navigationBarTitle
:
func navigationBarTitle(_ titleKey: LocalizedStringKey, displayMode: NavigationBarItem.TitleDisplayMode) -> some View
LocalizedStringKey
符合ExpressibleByStringLiteral
,因此字符串文字可以传递给LocalizedStringKey
类型的参数,但不能传递给title
之类的变量。
【讨论】:
以上是关于SwiftUI 在 iOS 13 版本中不能使用 navigationBarTitle 修饰符(已弃用),但在 iOS 14 中可以的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI iOS13情况下实现类似于CollectionView的效果
SwiftUI iOS13情况下实现类似于CollectionView的效果
SwiftUI iOS13情况下实现类似于CollectionView的效果