web-dev-qa-db-ja.com

NavigativeView PushとPop Animationsを無効にする方法

この単純なNavigationView

struct ContentView : View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
            }
        }
    }
}
 _

宛先ビューがスタックにプッシュ/ポップされたときに、NavigationViewアニメーションを無効にする方法を見つけましたか?

IOS2.0以降、これはUIKITで可能でした!フレームワークから尋ねるのはあまりにも多くないと思います。私はすべてのビュー(すなわち、NavigationViewコンテナ、宛先ビュー、NavigationLinkなど)であらゆる種類の修飾子を試しました

これらは私が試した修飾子のいくつかです。

.animation(nil)
 _
.transition(.identity)
 _
.transaction { t in t.disablesAnimations = true }
 _
.transaction { t in t.animation = nil }
 _

違いはありません。私はEnvironmentValuesのいずれかに役立つものを見つけませんでした:-(

私は非常に明白なものを見逃していますか、それともまだそこにはありませんか?

18
kontiki

Xcode 11.3 :

今すぐNavigationViewアニメーションを無効にするための修飾子はありません。

以下のように、Struct init()を使用してアニメーションを無効にすることができます。

struct ContentView : View {

    init(){
        UINavigationBar.setAnimationsEnabled(false)
    }

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
            }
        }
    }
}
 _
4
FRIDDAY

私は最近_swiftui-navigation-stack_( https://github.com/biobeats/swiftui-navigation-stack https://------)を作成しました。 NavigationStackView、標準NavigationViewのナビゲーション動作を模倣するビューでは、便利な機能を追加します。たとえば、質問でKontikiから要求された遷移アニメーションをNavigationStackViewを使用することができます。 NavigationStackViewを作成するときは_.nonetransitionTypeを指定するだけです。

_struct ContentView : View {
    var body: some View {
        NavigationStackView(transitionType: .none) {
            ZStack {
                Color.yellow.edgesIgnoringSafeArea(.all)

                PushView(destination: View2()) {
                    Text("Push")
                }
            }
        }
    }
}

struct View2: View {
    var body: some View {
        ZStack {
            Color.green.edgesIgnoringSafeArea(.all)
            PopView {
                Text("POP")
            }
        }
    }
}
_

PushViewPopViewプッシュビューとPOPビューを許可する2つのビューです(Swiftui NavigationLink)。これが完全な例です。

_import SwiftUI
import NavigationStack

struct ContentView : View {
    var body: some View {
        NavigationStackView(transitionType: .none) {
            ZStack {
                Color.yellow.edgesIgnoringSafeArea(.all)

                PushView(destination: View2()) {
                    Text("Push")
                }
            }
        }
    }
}

struct View2: View {
    var body: some View {
        ZStack {
            Color.green.edgesIgnoringSafeArea(.all)
            PopView {
                Text("POP")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
_

結果は次のとおりです。

enter image description here

あなたがこのオープンソースプロジェクトの改善にあなたが私に参加したらそれは素晴らしいでしょう。

0
superpuccio