滚动视图中的动画不起作用?使用 Xcode 11 beta 6



我试图做过渡动画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))
}
}
}
}

}}

这一定是一个错误,我建议您向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)
}
}

最新更新