【问题标题】:SwiftUI animation within ScrollView not workingScrollView 中的 SwiftUI 动画不起作用
【发布时间】:2019-10-26 13:28:55
【问题描述】:

只是无法理解这一点。我有一个完美的简单动画。但是当我将视图包装到 ScrollView 中(通过取消注释 2 行)它不再动画了吗?有人知道吗?

import SwiftUI

struct ContentView: View {
    @State var offset = CGSize(width: 0, height: 0)

    var body: some View {
//      ScrollView {
            VStack(spacing: 50) {
                Rectangle()
                    .frame(width: 100, height: 100)
                    .offset(self.offset)
                Button(action: {
                    withAnimation {
                        self.offset.width += 66
                    }
                })
                {
                    Text("Animate me")
                }
            }.frame(width: 300)
//      }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

【问题讨论】:

  • 我试过你的代码,它在模拟器中运行良好。当矩形包含在 ScrollView 中时,它会进行动画处理。我注意到的唯一区别是按钮和矩形位于屏幕顶部而不是中心。
  • @Andrew 复制粘贴问题中的代码我遇到了与 iTukker 相同的问题:如果动画位于 ScrollView 内,则动画将不起作用。您使用的是哪个 xCode 版本?
  • @superpuccio Xcode 11.1,在模拟器和预览版都试过了,效果很好。
  • @Andrew 我也在使用那个版本。很奇怪。我有同样的 iTukker 问题。
  • 我也在 Xcode 11.1 上,但没有成功。 @superpuccio 的回答成功了,我会接受的。仍在学习 SwiftUI,并且已经偶然发现了我的第一个动画。

标签: ios swift swiftui ios13


【解决方案1】:

我已经注意到了这种行为。问题似乎是明确的动画。如果您选择隐式动画,它会起作用:

struct ContentView: View {
    @State var offset = CGSize(width: 0, height: 0)

    var body: some View {
      ScrollView {
            VStack(spacing: 50) {
                Rectangle()
                    .frame(width: 100, height: 100)
                    .offset(self.offset)
                    .animation(.linear)
                Button(action: {
                    self.offset.width += 66
                })
                {
                    Text("Animate me")
                }
            }.frame(width: 300)
      }
    }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

我还没有设法找到原因,因此请将此视为一种解决方法。这可能是一个 SwiftUI 错误或我仍然无法理解的东西。

【讨论】:

  • 成功了,谢谢。仍然同意这似乎是一个错误。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2020-11-01
  • 1970-01-01
  • 2021-02-04
  • 2021-01-24
相关资源
最近更新 更多