🐈

SwiftUIでNavigationStackとNavigationViewを透過的に利用する

2023/08/08に公開

iOS15をまだサポートしていて、NavigationStackを利用したい場合に利用できるAdaptiveNavigationStackを作りました。

iOS16以上であれば、NavigationStackが、iOS15以下であればNavigationViewが使われます。
通常のプッシュ遷移であれば、実用に耐えるものになっていると思います。

また、iOS15のNavigationViewの場合は.navigationViewStyle(.stack)をつけてあげないと、@Stateなどでもっている値が更新されて、ビューが再描画される際、スタックされたビューが消えて最初のViewに戻ってしまうという不具合に遭遇する場合があるので、こちらも対応しています。

以下利用例です。NavigationStackNavigationViewと同様に使えます。

AdaptiveNavigationStack {
    NavigationLink {
        Text("destination")
    } label: {
        Text("label")
    }
}

環境

Xcode 14.3.1
Swift 5.8.1

Discussion