ScrollView 中的动画不起作用?使用 Xcode 11 测试版 6
Posted
技术标签:
【中文标题】ScrollView 中的动画不起作用?使用 Xcode 11 测试版 6【英文标题】:Animation in ScrollView is not working ? Using Xcode 11 beta 6 【发布时间】:2019-08-22 01:03:11 【问题描述】:我试图做过渡动画滚动视图,但发现滚动视图中的工作方式不同。但仍然无法在其中制作动画。我提供代码,请看一下。使用 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))
【问题讨论】:
【参考方案1】:这一定是一个错误,我建议您向 Apple 提交错误报告。我找到了一种解决方法(参见下面的代码),但不幸的是它发现了另一个错误!
为了让 ScrollView 内部的动画能够正常工作,您可以将内容封装在自定义视图中。这将解决这个问题。
这将发现一个新问题,我在您的代码中添加的边框可以看出这一点:添加 Text 视图时,它会将部分内容移动到 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)
【讨论】:
我报告了这个错误。太奇怪了,很多东西在我们封装后就开始起作用了。 ***.com/questions/57916502/… 这是一个错误还是我做错了什么?以上是关于ScrollView 中的动画不起作用?使用 Xcode 11 测试版 6的主要内容,如果未能解决你的问题,请参考以下文章
ViewPager 中的 ScrollView:滑动不起作用
(Swift) ScrollView 中的 StackView 不起作用
WkWebview contentOffset 在设置动画 false 时不起作用
React Native - TabNavigator 在 Android 的 ScrollView 中不起作用