Я думаю, что причина этого не в том, что вы звоните с анимацией из другой ветви дерева представления. Кнопка «Подробности» и представления, которые необходимо анимировать, находятся в разных ветвях иерархии. Я просто догадываюсь, но, похоже, это поддерживается решением, которое я разместил здесь.
Если вместо использования явных анимаций (т.е. с анимацией ) вы используете неявные анимации как для VStack, так и для текста, это работает:
struct ContentView: View {
@State var showDetails = false
func toggleDetails() { self.showDetails.toggle() }
var body: some View {
NavigationView() {
VStack {
Button(action: { self.toggleDetails() }) { Text("Tap to show details") }
if showDetails {
Text("Details go here.").animation(.basic())
}
}
.animation(.basic())
.navigationBarTitle(Text("Nav Bar"))
.navigationBarItems(trailing:
Button(action: {
self.toggleDetails()
}) { Text("Details") })
}
}
}