swiftui不能使用iOS 13版本中的navigationbartitle修饰符(已弃用),但可以在iOS14

问题描述 投票:0回答:2

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

'navigationBarTitle(_:displayMode:)' is only available in iOS 14.0 or newer

'navigationbartitle(_:displaymode :)'仅在iOS 14.0或newer

中可用

文献表示,它可从iOS 13.0-14.2获得,以前的SOANSWERS也发布了(iOS 13是最新的)也使用了。

是因为我无法使用它是“弃用”的?但是,为什么我可以在iOS 14.0中使用它?

Edit:


尝试复制后,它似乎只有在我没有存储在财产中的情况下才起作用。


title

comparison of storing 如果您仔细观察

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) } }
呼叫的解决方案,那不是您链接的方法:
ios swift xcode swiftui deprecated
2个回答
16
投票

是:

func navigationBarTitle(_ title: Text, displayMode: NavigationBarItem.TitleDisplayMode) -> some View

它无法解决第一个,因为您没有传递enter image description herefunc navigationBarTitle<S>(_ title: S, displayMode: NavigationBarItem.TitleDisplayMode) -> some View where S : StringProtocol 作为标题,是吗?您将论点宣布为一个

Text
。
第二种方法的文档。从文档中,我们可以清楚地看到它可从iOS 14.0到14.2.
使用字符串作为标题有效的原因(例如在

title

中)是因为您正在调用另一个OFLOACE
String

ContentView

navigationBarTitle

符合

func navigationBarTitle(_ titleKey: LocalizedStringKey, displayMode: NavigationBarItem.TitleDisplayMode) -> some View

的符合,因此字符串文字可以传递给类型的参数,而不是像
LocalizedStringKey的变量。 ITS,因为您正在为标题而不是文本视图使用字符串。 我遇到了与您相同的问题。
在iOS 14中,他们添加了直接将字符串直接放入您的导航栏的功能。在此之前,您必须使用
ExpressibleByStringLiteral

    

您需要使用
LocalizedStringKey
属性正确处理
title
贬值。为了简化这一点,我创建了一个Swift软件包,该软件包封装了几个SwiftUI修饰符的折旧处理逻辑,包括
.navigationBarTitle(Text(yourString), displayMode: .inline)

.

13
投票
SwiftSafeui

,您可以在软件包中找到

navigationBarTitle

,该软件包可以在采用iOS 14及以后采用新的修饰符的同时,使您可以在不同的iOS版本上保持兼容性。

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.