web-dev-qa-db-fra.com

Cette animation SwiftUI ne devrait que disparaître. Pourquoi se déplace-t-il vers la droite?

J'ai du mal à comprendre pourquoi cela se produit. J'ai réduit le problème à son expression minimale.

J'ai une seule vue Text qui, une fois supprimée, devrait disparaître. La .transition(.opacity) a été ajoutée à des fins de clarté uniquement. Cela ne devrait pas être nécessaire car c'est la valeur par défaut. Cependant, en plus du fondu sortant, la vue texte glisse vers la droite.

En jouant avec la longueur du texte, j'ai réalisé que lors de la transition, sa marge gauche veut être alignée avec la marge gauche du [~ # ~] changement [~ # ~] bouton. Mais pourquoi?!

Au contraire, une fois rajouté, cela fonctionne bien et il n'y a pas de mouvement. Juste un bel effet de fondu.

Le problème se produit non seulement avec iOS, mais aussi macOS. Utilisation de Xcode 11 beta 2.

enter image description here

import SwiftUI

struct ContentView : View {
    @State private var showText = true

    var body: some View {
        VStack {

            Spacer()

            if showText {
                Text("I should always be centered!").font(.largeTitle).transition(.opacity)
            }

            Spacer()

            Button(action: {
                withAnimation(.basic(duration: 1.5)) { self.showText.toggle() }
            }, label: {
                Text("CHANGE").font(.title)
            })

            Spacer()

            }
    }
}
6
kontiki

Pour moi, j'ai résolu le problème en ajoutant simplement ces modificateurs:

.transition(.identity)
.animation(nil)

Cela a arrêté toute animation par défaut que SwiftUI a créée automatiquement.

0
George_E