SwiftUI-ナビゲーションスタックに戻ると、ビューの割り当てが解除されません

マトロソフアレクサンダー

まず、ビューの階層を強調表示することから始めたいと思います。私はただ持っFindUserViewていWelcomeViewます。

FindUserView入力した電子メールが存在する場合、サーバーからユーザーを取得するために使用されます。もしそうなら、それWelcomeViewは私がパスワードを入力してログインできる次の場所に自動的にリダイレクトします。

ここにリポジトリとビデオSwiftUIを作成しました-ポップバックはビューの割り当てを解除しません

私のFindUserView:----------------------------とWelcomeView

ここに画像の説明を入力してください ----------------- ここに画像の説明を入力してください

の[次へ]ボタンを押すとFindUserView、データベースからユーザーを取得します。

func fetchUser(with email: String) {
        userService.getUser(with: email) { (result) in
            switch result {
            case .success(_):
                self.showActivityIndicator = false
                self.showingAlert = false
                self.showWelcomeView = true
                break
            case .failure:
                self.showingAlert = true
                break
            }
        }
    }

私が使用NavigationViewしてプログラム的に示してWelcomeView変更することで、showWelcomeView上記の状態を:

NavigationLink(destination: WelcomeView(), isActive: $showWelcomeView) { EmptyView() }

今、私は歓迎されていますWelcomeView

しかし、このボタンを押して元に戻すと、WelcomeViewまだ存在しいます。

ここに画像の説明を入力してください

@EnvironmentObject観察可能なプロパティの状態で使用すると、すでに却下されているビューにどのように反映されるかがわかります。これは正しい動作ですか?それとも、どういうWelcomeViewわけかデロックする必要がありますか?メモリリークにつながりますか?

UIKitナビゲーションスタックにポップバックすると、View ControllerUINavigationControllerが配列から自動的に削除れて割り当てが解除されるので、少し心配ですSwiftUIで正しくポップバックする方法は?

彼の気性

実際、それが欠陥であるかどうかは明らかではありません-SwiftUIビューは値であるため、それらに割り当て解除することはありませんそれはのように見えるNavigationViewだけのようなものに保つlastViewのそれは別のものに交換されるまで、変数を。たぶん、Appleにフィードバックを提出する価値があります。

一方NavigationLink、これは、ビューがスタックから削除されたときに、正確にタップされてクリーンアップされるまで(ビューモデルなどの関連リソースを使用して)実際の宛先ビューの作成を延期できるソリューションです

Xcode 11.4 / iOS13.4でテスト済み

ヘルパープロキシビュープレゼンター:

struct LinkPresenter<Content: View>: View {
    let content: () -> Content

    @State private var invlidated = false
    init(@ViewBuilder _ content: @escaping () -> Content) {
        self.content = content
    }
    var body: some View {
        Group {
            if self.invlidated {
                EmptyView()
            } else {
                content()
            }
        }
        .onDisappear { self.invlidated = true }
    }
}

使用法:

NavigationLink(destination: LinkPresenter { WelcomeView() }, 
    isActive: $showWelcomeView) { EmptyView() }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SwiftUIの同じビューにタブバーとナビゲーションバーがありますか?

分類Dev

ナビゲーションバーの戻るボタンを非表示にできません(SwiftUI)

分類Dev

QLPreviewControllerにSwiftUIのナビゲーションバーがありません

分類Dev

SwiftUI-カスタムナビゲーションの「戻る」ボタン、奇妙なことにビュー間を行ったり来たりする

分類Dev

SwiftUi-「戻る」ボタンとナビゲーションバーを非表示にします(ほんの一瞬で表示されます)

分類Dev

同じビューへのSwiftUiナビゲーションリンクは常にサブビューとして追加されます

分類Dev

SwiftUI:宛先ビューのナビゲーションバーには背景がなく、スクロール時にアニメーション化されません

分類Dev

SwiftUIナビゲーション複数の戻るボタン

分類Dev

リスト行ごとに2つのナビゲーションリンクで途切れるSwiftUIナビゲーションコントローラー

分類Dev

SwiftUI:iPhoneX以降のデバイスではナビゲーションバーが画面の上部に表示されません

分類Dev

SwiftUIナビゲーションビューとソートされたFetchRequestを使用してリストアイテムを詳細ビューで再配置するときに問題が発生します

分類Dev

SwiftUIのナビゲーション戻るボタンを押したときにアクションを追加できますか?

分類Dev

編集モードのSwiftUIリスト行では、ボタンアクション/ナビゲーションリンクが機能しませんか?

分類Dev

SwiftUIのクラッシュ:シートビューを閉じると「SheetBridge:放棄されたプレゼンテーションが検出されました」(別のシートビューによってトリガーされます)

分類Dev

SwiftUIのクラッシュ:シートビューを閉じると「SheetBridge:放棄されたプレゼンテーションが検出されました」(別のシートビューによってトリガーされます)

分類Dev

SwiftUIのクラッシュ:シートビューを閉じると「SheetBridge:放棄されたプレゼンテーションが検出されました」(別のシートビューによってトリガーされます)

分類Dev

ナビゲーションリンクがMacOS用のSwiftUIを選択する前に部分的に表示される詳細ビュー

分類Dev

異なるビュー間のSwiftUIナビゲーション

分類Dev

SwiftUIの@Stateに応じてナビゲーションビューのナビゲーションビュースタイルを変更するにはどうすればよいですか?

分類Dev

ナビゲーションビューをポップして、ルートビューのSwiftUIではなく前のビューに戻るにはどうすればよいですか?

分類Dev

カスタムポップアップが表示されたときのSwiftUIナビゲーションバーの外観と機能

分類Dev

SwiftUIのNavigationViewのナビゲーションバーのカスタム戻るボタン

分類Dev

SwiftUI戻るボタンを押したままナビゲーションバーを非表示にする方法

分類Dev

アニメーションはSwiftUIのビューステート変更に適用されません

分類Dev

SwiftUIナビゲーションバー内にタイトルとしてビューを埋め込む

分類Dev

SwiftUIのナビゲーションバーから戻るボタンのテキストを削除する

分類Dev

SwiftUIプレビューにエラーが表示されます-このファイルでプレビューできません-現在のターゲットでビルド設定を調整する必要があります

分類Dev

SwiftUI-戻るボタンと半分灰色の画面で開くナビゲーションビュー/奇妙な動作

分類Dev

SwiftUIナビゲーション:詳細ビューを別のアイテムに切り替える方法は?

Related 関連記事

  1. 1

    SwiftUIの同じビューにタブバーとナビゲーションバーがありますか?

  2. 2

    ナビゲーションバーの戻るボタンを非表示にできません(SwiftUI)

  3. 3

    QLPreviewControllerにSwiftUIのナビゲーションバーがありません

  4. 4

    SwiftUI-カスタムナビゲーションの「戻る」ボタン、奇妙なことにビュー間を行ったり来たりする

  5. 5

    SwiftUi-「戻る」ボタンとナビゲーションバーを非表示にします(ほんの一瞬で表示されます)

  6. 6

    同じビューへのSwiftUiナビゲーションリンクは常にサブビューとして追加されます

  7. 7

    SwiftUI:宛先ビューのナビゲーションバーには背景がなく、スクロール時にアニメーション化されません

  8. 8

    SwiftUIナビゲーション複数の戻るボタン

  9. 9

    リスト行ごとに2つのナビゲーションリンクで途切れるSwiftUIナビゲーションコントローラー

  10. 10

    SwiftUI:iPhoneX以降のデバイスではナビゲーションバーが画面の上部に表示されません

  11. 11

    SwiftUIナビゲーションビューとソートされたFetchRequestを使用してリストアイテムを詳細ビューで再配置するときに問題が発生します

  12. 12

    SwiftUIのナビゲーション戻るボタンを押したときにアクションを追加できますか?

  13. 13

    編集モードのSwiftUIリスト行では、ボタンアクション/ナビゲーションリンクが機能しませんか?

  14. 14

    SwiftUIのクラッシュ:シートビューを閉じると「SheetBridge:放棄されたプレゼンテーションが検出されました」(別のシートビューによってトリガーされます)

  15. 15

    SwiftUIのクラッシュ:シートビューを閉じると「SheetBridge:放棄されたプレゼンテーションが検出されました」(別のシートビューによってトリガーされます)

  16. 16

    SwiftUIのクラッシュ:シートビューを閉じると「SheetBridge:放棄されたプレゼンテーションが検出されました」(別のシートビューによってトリガーされます)

  17. 17

    ナビゲーションリンクがMacOS用のSwiftUIを選択する前に部分的に表示される詳細ビュー

  18. 18

    異なるビュー間のSwiftUIナビゲーション

  19. 19

    SwiftUIの@Stateに応じてナビゲーションビューのナビゲーションビュースタイルを変更するにはどうすればよいですか?

  20. 20

    ナビゲーションビューをポップして、ルートビューのSwiftUIではなく前のビューに戻るにはどうすればよいですか?

  21. 21

    カスタムポップアップが表示されたときのSwiftUIナビゲーションバーの外観と機能

  22. 22

    SwiftUIのNavigationViewのナビゲーションバーのカスタム戻るボタン

  23. 23

    SwiftUI戻るボタンを押したままナビゲーションバーを非表示にする方法

  24. 24

    アニメーションはSwiftUIのビューステート変更に適用されません

  25. 25

    SwiftUIナビゲーションバー内にタイトルとしてビューを埋め込む

  26. 26

    SwiftUIのナビゲーションバーから戻るボタンのテキストを削除する

  27. 27

    SwiftUIプレビューにエラーが表示されます-このファイルでプレビューできません-現在のターゲットでビルド設定を調整する必要があります

  28. 28

    SwiftUI-戻るボタンと半分灰色の画面で開くナビゲーションビュー/奇妙な動作

  29. 29

    SwiftUIナビゲーション:詳細ビューを別のアイテムに切り替える方法は?

ホットタグ

アーカイブ