From 0eb5fce745f2e09f0a47a2f066884c2b764c7c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 22 Dec 2025 11:47:33 +0800 Subject: [PATCH] Fix Settings first navigation animation missing --- .../Abstract/NavigationStackCompat.swift | 36 +++++++++++++++---- .../Views/Setting/SettingView.swift | 6 ++-- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/ApplicationLibrary/Views/Abstract/NavigationStackCompat.swift b/ApplicationLibrary/Views/Abstract/NavigationStackCompat.swift index 84901fe..f2dc3f1 100644 --- a/ApplicationLibrary/Views/Abstract/NavigationStackCompat.swift +++ b/ApplicationLibrary/Views/Abstract/NavigationStackCompat.swift @@ -1,17 +1,41 @@ import SwiftUI -public func NavigationStackCompat(@ViewBuilder content: () -> some View) -> some View { - Group { +public struct NavigationStackCompat: View { + private let content: Content + + public init(@ViewBuilder content: () -> Content) { + self.content = content() + } + + public var body: some View { if #available(iOS 17.0, macOS 13.0, tvOS 17.0, *) { // view not updating in iOS 16, but why? - NavigationStack { - content() + NavigationStackWithPath { + content } } else { - NavigationView(content: content) + NavigationView { + content + } #if !os(macOS) - .navigationViewStyle(.stack) + .navigationViewStyle(.stack) #endif } } } + +@available(iOS 16.0, macOS 13.0, tvOS 16.0, *) +private struct NavigationStackWithPath: View { + private let content: Content + @State private var path = NavigationPath() + + init(@ViewBuilder content: () -> Content) { + self.content = content() + } + + var body: some View { + NavigationStack(path: $path.animation(.linear(duration: 0))) { + content + } + } +} diff --git a/ApplicationLibrary/Views/Setting/SettingView.swift b/ApplicationLibrary/Views/Setting/SettingView.swift index 17ff2ed..4fcea91 100644 --- a/ApplicationLibrary/Views/Setting/SettingView.swift +++ b/ApplicationLibrary/Views/Setting/SettingView.swift @@ -99,8 +99,10 @@ public struct SettingView: View { #if os(macOS) Tabs.app.navigationLink #endif - ForEach([Tabs.core, Tabs.packetTunnel, Tabs.onDemandRules, Tabs.profileOverride]) { it in - it.navigationLink + Section { + ForEach([Tabs.core, Tabs.packetTunnel, Tabs.onDemandRules, Tabs.profileOverride]) { it in + it.navigationLink + } } #if !os(tvOS) Section("About") {