SwiftUI et rotation d'interface

Bonjour,

Quel est l'équivalent de "didRotateFromInterfaceOrientation" en SwiftUI pour avoir une UI qui s'adapte à la rotation du devise ?

Réponses

  • Alors sans forcément tester:

    Tu commence par ajouter un @State à ta vue, du genre:

    @State private var orientation = UIDeviceOrientation.unknown
    

    Et à ta vue tu ajoute un listener pour publishers :

    var body: some View {
        VStack {
            // des trucs
        }.onReceive(UIDevice.current.publisher(for: \.orientation), perform: { orientation in
            self.orientation = orientation
        })
    }
    

    Tente le coup si ça râle parce que tu modifie l'avion en plein vol on trouvera une solution 😉

  • Merci Pyroh !
    Tu m'as mis sur la voie et j'ai trouvé ce code :
    https://gist.github.com/pyxn/84740bdf347a33b598fa579a3c325a7e

  • Je serai toi je n’utiliserai pas ce code. La personne qui l’a écrit n’était pas encore très au fait des best practices SwiftUI...
  • Mais le tien ne fonctionnait pas.

  • En fait juste en ajoutant un "GeometryReader", ça suffit.
    Pas besoin du @State ni du .onReceive

    Que je n'aime pas ces trucs + ou - automatiques mais difficiles à utiliser.

    Le but était simplement de reproduire l'UI de base de mon programme iPocket Draw avec une barre de boutons horizontale en haut à gauche, une barre verticale à gauche un peu décalée en dessous et 2 autres boutons à droite.
    Et cela n'a pas l'air si simple que cela avec SwiftUI...
    Mais je n'ai probablement pas tout bien compris.

Connectez-vous ou Inscrivez-vous pour répondre.