我试图制作ScrollView过渡动画,但发现在scrollView中它们的工作方式有所不同。但是仍然无法在其中做动画。我正在提供代码,请看一看。使用Xcode 11 beta 6
import SwiftUI
struct ContentView : View {
@State private var isButtonVisible = false
var body: some View {
NavigationView {
ScrollView{
VStack {
Button(action: {
// withAnimation {
self.isButtonVisible.toggle()
// }
}) {
Text("Press me")
}
if isButtonVisible {
Text("sss")
.frame(height: true ? 50 : 0, alignment: .center)
.background(Color.red)
.animation(.linear(duration: 2))
// .transition(.move(edge: .top))
}
}
}
}
}}
答案 0 :(得分:2)
这一定是一个错误,建议您向Apple提交错误报告。我找到了一种解决方法(请参见下面的代码),但不幸的是它发现了另一个错误!
为了使ScrollView中的动画正常工作,可以将内容封装在自定义视图中。这样可以解决该问题。
这将发现一个新问题,我在代码中添加的边框可以证明这一点:添加“文本”视图时,会将部分内容移到ScrollView之外。
您将看到这是不正确的。尝试使用默认值isButtonVisible = true启动您的应用程序,您会看到它以不同的方式呈现它。
struct ContentView : View {
var body: some View {
NavigationView {
ScrollView {
EncapsulatedView().border(Color.green)
}.border(Color.blue)
}
}
}
struct EncapsulatedView: View {
@State private var isButtonVisible = false
var body: some View {
VStack {
Text("Filler")
Button(action: {
withAnimation(.easeInOut(duration: 2.0)) {
self.isButtonVisible.toggle()
}
}) {
Text("Press me")
}
if isButtonVisible {
Text("sss")
.frame(height: true ? 50 : 0, alignment: .center)
.transition(.opacity)
.background(Color.red)
}
Spacer()
}.border(Color.red)
}
}
答案 1 :(得分:-1)
.animation(Animation.linear(duration: 2))
您打错电话了