web-dev-qa-db-fra.com

SwiftUI: la barre de navigation de la vue de destination n'a pas d'arrière-plan et n'est pas animée en défilement

J'essaie de créer une vue de navigation qui mène à une vue de destination avec une vue de défilement, où le titre de navigation de la vue de destination s'animerait vers le mode d'affichage en ligne ou au moins défiler derrière la barre de navigation elle-même.

Fondamentalement, j'essaie de reproduire le comportement de l'application Musique standard, en particulier lorsque vous passez de la bibliothèque aux morceaux.

Là, vous avez la vue source (bibliothèque) avec son propre titre qui est animée en mode d'affichage en ligne sur défilement. Lorsque vous appuyez sur Morceaux, vous obtenez également une liste avec un nouveau titre (morceaux) qui s'anime également en mode d'affichage en ligne sur défilement.

J'ai donc principal NavigationView avec NavigationBarTitle. Je passe à destinationView avec son propre NavigationBarTitle et une longue liste de contenu. Au défilement, NavigationBarTitle de la vue de navigation principale passe en mode d'affichage en ligne, mais NavigationBar de la vue de destination se comporte très bizarrement: il s'agit essentiellement d'une superposition sans arrière-plan ni animation.

Et si vous supprimez NavigationBarTitle de la vue de destination tous ensemble, cela ne fera qu'empirer les choses. Il semble qu'il ajoute une autre barre de navigation transparente sans rien.

A également essayé d'ajouter un arrière-plan à la barre de navigation, a examiné la documentation, mais n'a trouvé aucune solution.

Je ne sais pas si je fais quelque chose de très mal ou si c'est juste un bêta bêta de SwiftUI ou Xcode.

import UIKit

struct ContentView: View {
    var body: some View {
        NavigationView{
            List(0..<20) { item in
                NavigationLink(destination: DetailedView()) {
                    Text("Next view")
                }
            }
            .navigationBarTitle("Source View")
        }
    }
}

struct DetailedView: View {
    var body: some View {
            List(0...25) { number in
                Text("This is \(number)'th row")
            }
            .navigationBarTitle(Text("Destination View")) 
// comment out line above to see empty frame of navigation bar

    }
}
6
Anton

Ce problème est résolu dans la version publique iOS 13.1 (avec la version App Store de Xcode 11).

1
RogerTheShrubber

Je suis actuellement en version bêta 5, et je pense que c'est un bug en cours avec SwiftUI.

J'ai remarqué le même problème lors de l'exécution des didacticiels SwiftUI Repères, et vous pouvez facilement reproduire le problème: https://imgur.com/a/aYgUUH

Pour l'instant, pour éviter de voir tout le contenu défiler sous une barre de navigation transparente, j'ai converti toutes mes barres de navigation pour qu'elles s'affichent sous la forme inline, car automatic et large rencontrent le problème .

List {
    // ...
}
.navigationBarTitle(Text("MyTitle"), displayMode: .inline)
1
Cary