相关疑难解决方法(0)

SwiftUI - 在列表中的视图内触发的动画也不会为列表设置动画

我有一个List显示两个Views相同类型的。当您点击其中一个视图时,它们会通过动画改变高度。

但是,List嵌入的这些视图不会动画,这会导致丑陋的故障,因为List行的高度会立即更改,而该行内的实际视图是动画的:

在此处输入图片说明

我怎样才能制作List动画?我尝试向其添加.animation修饰符,但这没有任何作用。

我也不想将tapGesture视图移出。视图应该是自包含的,而不是依赖其他视图来控制它(我认为这就是 MVVM 的意义所在)

谢谢!

import SwiftUI

struct SubView: View {
    @State var change: Bool = false

    var body: some View {
        Rectangle()
            .frame(width: 200, height: change ? 300 : 200)
            .foregroundColor(Color.red)
            .onTapGesture {
                withAnimation {
                    self.change.toggle()
                }
        }
    }
}

struct Test: View {

    var body: some View {
        List {
            SubView()
            SubView()
        }
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

10
推荐指数
1
解决办法
1103
查看次数

SwiftUI:扩大/缩小列表单元格

我正在开发一个List可以扩展/收缩的 SwiftUI 单元,这是一个非常简单的东西,您可以在很多情况下看到。类似于以下内容(以下是在 中实现的UIKit):

在此输入图像描述

老实说,我正在努力在 SwiftUI 上实现同样的功能。我尝试了几种方法:

1)第一种方法:有条件地包含单元格底部:

import SwiftUI

struct Approach1: View {
    @State private var selectedIndex = -1

    var body: some View {
        List {
            ForEach(0...20, id: \.self) { idx in
                Cell(isExpanded: self.selectedIndex == idx)
                    .onTapGesture {
                        withAnimation {
                            self.selectedIndex = (self.selectedIndex == idx) ? -1 : idx
                        }
                    }
            }
        }
    }
}

private struct Cell: View {
    let isExpanded: Bool
    var body: some View {
        VStack(alignment: .leading) {
            Text("Hello World")
                .animation(nil)
            if …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

6
推荐指数
1
解决办法
1015
查看次数

标签 统计

ios ×2

swift ×2

swiftui ×2