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.
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()
}
}
}
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.