I've found a solution here: https://swiftui-lab.com/matchedgeometryeffect-part1/
Basically what's needed is to use this 'invisible' transition:
extension AnyTransition {
static var invisible: AnyTransition {
AnyTransition.modifier(
active: InvisibleModifier(pct: 0),
identity: InvisibleModifier(pct: 1)
)
}
struct InvisibleModifier: AnimatableModifier {
var pct: Double
var animatableData: Double {
get { pct }
set { pct = newValue }
}
func body(content: Content) -> some View {
content.opacity(pct == 1.0 ? 1 : 0)
}
}
}