I'm having a hard time understanding why this happens. I reduced the problem to its minimum expression.
I have a single Text
view, that when removed, should just fade out. The .transition(.opacity)
has been added for clarity only. It should not be needed as it is the default. The result, however, is that in addition to the fade-out, the text view slides to the right.
By playing with the text length, I realised that during the transition, its left margin wants to be aligned with the left margin of the CHANGE button. But why?!
On the contrary, when added back, it works fine and there is no movement. Just a nice fade-in effect.
The problem not only occurs with iOS, but macOS too. Using 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 {
withAnimation(.basic(duration: 1.5)) {
self.showText.toggle()
}
} label: {
Text("CHANGE")
.font(.title)
}
Spacer()
}
}
}