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 中不起作用

React Native:如何在 ScrollView/ListView 子项进入/离开视口时为其设置不透明度动画?

iOS ScrollView setContentSize 不起作用