[英]SwiftUI NavigationView vs NavigationStack for iOS 15/16
我正在嘗試使我的 iPhone 應用程序(針對 iOS 15 及更高版本)與 iOS 16 完全兼容,但沒有成功!
我不知道如何在同一段代碼中擁有 iOS 15 的NavigationView
和 iOS 16 的NavigationStack
。
Xcode 不接受上述代碼:
if #available(iOS 16, *) {
NavigationStack {
} else {
NavigationView {
}
來自: SwiftUI NavigationView/Stack(如果可用)iOS 15/16
我想按照@timmy 的建議創建自定義容器將是唯一的解決方案。 但我不知道如何進行。
那有什么辦法呢?
我個人不會使用NavigationStack
,除非我的目標是 iOS 16+,但如果你想這樣做,你可以制作自己的 Navigation Wrapper
struct MyNavigation<Content>: View where Content: View {
@ViewBuilder var content: () -> Content
var body: some View {
if #available(iOS 16, *) {
NavigationStack(root: content)
} else {
NavigationView(content: content)
}
}
}
然后像使用NavigationStack
或NavigationView
一樣使用它,在 iOS 15 或更早版本上,它將使用NavigationView
,在 iOS 16 或更高版本上,它將使用NavigationStack
Xcode 不接受您的代碼,因為它無效。 在同一個塊中不能有沒有}
的{
。
我發現使用NavigationView
會在 iPhone 和運行在 iOS 16 下的 iPad 應用程序上出現問題,即使NavigationView
只是暫時棄用。 在 iPhone 上,從NavigationLink
的視圖通常會在打開后立即自行關閉。 在 iPad 上,出現同樣的問題,后退箭頭的生成似乎有點隨機,尤其是在文檔應用程序中。 我發現使用NavigationSplitView
和NavigationStack
是非常值得的,盡管這需要我編寫大量額外的代碼來獲得令人滿意的結果,尤其是在設計為在 iPhone 和 iPad 上以最佳狀態運行的應用程序中。也就是說, Apple 確實在此處提供了一些關於如何采用新視圖的明確建議。
我遇到了另一個奇怪的問題 iOS 16. 模態表中的選擇器,其列表 arrays 填充.onAppear
,不再按預期工作,並且選擇器選擇不能再以編程方式設置。 在激活模式表並將其作為Binding
傳遞給 Sheet 之前,您必須填充 Picker 的列表。
感謝halo提供有關如何使用if #available()
的重要提示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.