Ios 如何创建能够适应其子项的ScrollView';改变大小

Ios 如何创建能够适应其子项的ScrollView';改变大小,ios,swiftui,Ios,Swiftui,[Beta 4]我有一个卡片列表,当用户点击它们以显示更多信息时,每个卡片都可以展开 但是,当卡的大小发生变化时,包含滚动的视图不会展开或收缩 我发现实现这一点的唯一方法是使用列表,它似乎会自动调整内容,但这不是我想要的,因为它引入了列表的其他特性(最明显的是分隔符) 不使用ForEach(即仅堆叠多张卡()会产生相同的结果 在Beta 3中,我找到了一个解决办法,通过将扩展为@绑定,然后为每张卡创建一个@State数组,但自从Beta 4以来,这不再起作用,因为不断变化的值不再向上传播,除非我

[Beta 4]我有一个卡片列表,当用户点击它们以显示更多信息时,每个卡片都可以展开

但是,当卡的大小发生变化时,包含滚动的视图不会展开或收缩

我发现实现这一点的唯一方法是使用列表,它似乎会自动调整内容,但这不是我想要的,因为它引入了列表的其他特性(最明显的是分隔符)

不使用ForEach(即仅堆叠多张
卡()
会产生相同的结果

在Beta 3中,我找到了一个解决办法,通过将
扩展为
@绑定
,然后为每张卡创建一个
@State
数组,但自从Beta 4以来,这不再起作用,因为不断变化的值不再向上传播,除非我在父视图中还有一个直接绑定到该数组的元素(也就是说,也是一个开关)@state的状态现在似乎只有在有元素直接绑定到它时才会改变

struct ExpandableChildViewTest: View {

    var body: some View {

        ScrollView {
            VStack(alignment: .leading, spacing: 20) {
                ForEach(1...10) { _ in
                    Card()
                }
            }
        }
        .padding()
            .border(Color.green, width: 1)
    }
}

struct Card: View {

    @State private var expanded = true

    var body: some View {

        ZStack {
            Rectangle()
                .frame(height: expanded ? 350: 100)
                .foregroundColor(Color.blue)
                .cornerRadius(20)
                .padding(.vertical)
                .tapAction() {
                    self.expanded.toggle()
            }
        }
    }
}


我期望(希望)包含Scrollview的子视图更改大小时可以调整其大小,但这并没有发生。这会导致内容从Scrollview中脱落,或者Scrollview中出现大量额外空间

(我的名声还不允许评论,所以我用这种方式…) 我有一个类似的情况:一个具有不同粒度的时间轴(十年、年、月等),并且用户应该能够平滑地缩放,同时比例也会自动调整。到目前为止,我找到的唯一方法是计算当前放大率的比例的总宽度,并通过模型将其交给视图。然后,嵌入式视图将获得一个具有该宽度的
.frame
,以及
滚动视图
然后正确处理滚动

然而,这远远不够优雅。因为嵌入式视图实际上知道它的宽度,所以应该可以(但如何?)让
滚动视图
知道该宽度。在我的环境中,滚动视图(没有显式的
.frame
)只显示一个空屏幕,带有显式的
.frame
一切正常(但性能不够)

顺便说一句:自Beta 5以来,绑定的执行方式发生了变化。您现在可以使用
@ObservedObject var model:model
在视图中设置模型,并使用
@Published var something:SomeType
传播模型的更改,这比以前容易得多。

(我的名声还不允许评论,所以我用这种方式…) 我有一个类似的情况:一个具有不同粒度的时间轴(十年、年、月等),并且用户应该能够平滑地缩放,同时比例也会自动调整。到目前为止,我找到的唯一方法是计算当前放大率的比例的总宽度,并通过模型将其交给视图。然后,嵌入式视图将获得一个具有该宽度的
.frame
,以及
滚动视图
然后正确处理滚动

然而,这远远不够优雅。因为嵌入式视图实际上知道它的宽度,所以应该可以(但如何?)让
滚动视图
知道该宽度。在我的环境中,滚动视图(没有显式的
.frame
)只显示一个空屏幕,带有显式的
.frame
一切正常(但性能不够)

顺便说一句:自Beta 5以来,绑定的执行方式发生了变化。现在,您可以使用
@ObservedObject var model:model
在视图中设置模型,并使用
@Published var something:SomeType
传播模型的更改,这比以前容易得多