0

所以我试图在列表视图中为每个嵌入的行实现扩展/收缩行,结果发现列表视图单元格的动画不流畅。在查看本教程后,它建议使用带有 foreach 的滚动视图,因为它的动画效果更流畅。扩展/收缩工作正常,但只有当我第一次打开页面时才会出现意想不到的副作用。HStack 似乎在视图的左侧开始展平,并动画展开到其正常的起始位置。我已经放慢了视频中的动画速度,以便更容易看到,并且我删除了 ForEach,因为它似乎不是问题的原因。我不知道是什么原因造成的,谷歌搜索没有得到任何答案。这里有人有答案或至少有一些建议吗?非常感激

@State var showTemp: Bool = false

var body: some View {
    ScrollView(.vertical, showsIndicators: false) {

        HStack(alignment: .top) {
            Text("Hello")
                .font(.system(size: 32))

            if showTemp {
                VStack {
                    Text("Middle 1")
                    Text("Middle 2")
                    Text("Middle 3")
                    Text("Middle 4")
                    Text("Middle 5")
                }
            }

            Spacer()

            Text("Goodbye")
        }
        .border(Color.black, width: 2)
        .onTapGesture {
            self.showTemp.toggle()
        }
        .background(Color.blue)
        .animation(.default)

    }
    .background(Color.green)
    .onAppear(perform: loadMethod)
}

发生了什么(动画已经放慢了)

4

1 回答 1

0

从不同的角度看待问题后,我似乎已经回答了自己的问题。使用 GeogetryReader 并将 HStack 的框架宽度设置为 geometry.size.width 修复了它。

我认为这是可行的,因为在不指定宽度的情况下,HStack 会尽可能多地填充区域。出于某种原因,它在加载视图时开始模糊,然后扩展以填充其区域,我猜除非您对其应用动画,否则它是不可见的。

试图在这里提供帮助,我不想成为那些回答自己的问题但不显示答案的人之一。

于 2020-03-31T22:16:59.403 回答