gpt4 book ai didi

如果从 VStack 或 NavigationItem 中调用,SwiftUI 动画会有所不同

转载 作者:行者123 更新时间:2023-12-04 17:35:27 25 4
gpt4 key购买 nike

我有一个非常简单的 VStack,直接基于 Paul Hudson's 之一优秀的 SwiftUI 示例。有两行Text,其中一行是隐藏的。有一种方法可以切换控制隐藏的Text@State var

如果我从 VStack 中调用该函数,它会正常运行。如果我从 navigationBarItems 调用它,它会丢失动画。我是否遗漏了有关 View 如何构成的信息?

struct ContentView: View {
@State var showDetails = false
func toggleDetails() { withAnimation { self.showDetails.toggle() } }

var body: some View {
NavigationView() {
VStack {
Button(action: { self.toggleDetails() }) { Text("Tap to show details") }

if showDetails { Text("Details go here.") }
}
.navigationBarTitle(Text("Nav Bar"))
.navigationBarItems(trailing:
Button(action: { self.toggleDetails() }) {
Text("Details")
})
}
}
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif

Inconsistent Animations

最佳答案

Beta 5 更新

似乎 beta 5 解决了这个问题。不再需要解决方法。


beta 4 和之前版本的解决方法

我认为它不起作用的原因是因为您从 View 树的不同分支调用 withAnimation。 “详细信息”按钮和需要动画的 View 位于层次结构的不同分支上。我只是在猜测,但它似乎得到了我在此处发布的解决方法的支持。

如果您不使用显式动画(即 withAnimation),而是在 VStack 和文本上使用隐式动画,它会起作用:

enter image description here

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") })
}
}
}

关于如果从 VStack 或 NavigationItem 中调用,SwiftUI 动画会有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com