The target view has .opacity()
and .offset()
modifiers in a scoped animation (iOS 17):
Text("Hello, world!")
.animation(.default) {
$0
.opacity(animate ? 1 : 0.2)
.offset(y: animate ? 0 : 100) // <-- DOESN'T WORK
}
But only the .opacity()
works when the state is changed directly or withAnimation{}
. The .offset()
only works when using withAnimation{}
, even though it should animate in both cases, like opacity.
Is this a SwiftUI bug? Did anyone encounter this?
import SwiftUI
struct ContentView: View {
@State private var animate = false
var body: some View {
VStack(spacing: 20) {
Button("Toggle Scoped Animation") {
animate.toggle()
}
Button("Toggle withAnimation{}") {
withAnimation {
animate.toggle()
}
}
Text("Hello, world!")
.animation(.default) {
$0
.opacity(animate ? 1 : 0.2)
.offset(y: animate ? 0 : 100) // <-- DOESN'T WORK
}
}
}
}
#Preview {
ContentView()
}
@main
struct ScopedAnimationOffsetBugApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Tested on Xcode 15.3 (15E204a), iOS 17.4 Simulator and iPhone Device.
Bug report FB13693703 filed with Apple.