Используйте направляющие:
struct ViewsExercise: View {
@State var show = true
var body: some View {
VStack(alignment: .leading, spacing: 20) {
Spacer()
Button("Tap") {
self.show.toggle()
}
.font(.title)
if show {
Circle()
.frame(width: 64, height: 64)
.foregroundColor(.red)
.alignmentGuide(.leading, computeValue: { d in
64
})
.transition(AnyTransition.scale.animation(.easeInOut(duration: 1)))
}
Spacer()
}
}
}

Подробнее о направляющих вы можете узнать здесь . Как упоминалось в @Asperi, модификатор .offset не меняет положение просмотра. Представление по-прежнему находится в точке (0,0), поэтому переход происходит в исходной точке. Если вы хотите «физически» сместить вид, вам следует использовать направляющие выравнивания.
Надеюсь, это поможет.