簡體   English   中英

SwiftUI iOS 的 NavigationView 與 NavigationStack 15/16

[英]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)
        }
    }
}

然后像使用NavigationStackNavigationView一樣使用它,在 iOS 15 或更早版本上,它將使用NavigationView ,在 iOS 16 或更高版本上,它將使用NavigationStack

Xcode 不接受您的代碼,因為它無效。 在同一個塊中不能有沒有}{

我發現使用NavigationView會在 iPhone 和運行在 iOS 16 下的 iPad 應用程序上出現問題,即使NavigationView只是暫時棄用。 在 iPhone 上,從NavigationLink的視圖通常會在打開后立即自行關閉。 在 iPad 上,出現同樣的問題,后退箭頭的生成似乎有點隨機,尤其是在文檔應用程序中。 我發現使用NavigationSplitViewNavigationStack是非常值得的,盡管這需要我編寫大量額外的代碼來獲得令人滿意的結果,尤其是在設計為在 iPhone 和 iPad 上以最佳狀態運行的應用程序中。也就是說, Apple 確實在此處提供了一些關於如何采用新視圖的明確建議。

我遇到了另一個奇怪的問題 iOS 16. 模態表中的選擇器,其列表 arrays 填充.onAppear ,不再按預期工作,並且選擇器選擇不能再以編程方式設置。 在激活模式表並將其作為Binding傳遞給 Sheet 之前,您必須填充 Picker 的列表。

感謝halo提供有關如何使用if #available()的重要提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM