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