首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法避免SwiftUI GeometryReader阻止嵌套视图在列表中增长?

在SwiftUI中,可以使用GeometryReader来获取视图的几何信息,但是在列表中使用GeometryReader时,可能会导致嵌套视图无法正常增长。为了避免这个问题,可以使用PreferenceKey来解决。

PreferenceKey是一个协议,用于在视图层次结构中传递和聚合数据。通过定义一个PreferenceKey,可以在视图层次结构中传递和共享数据,并在需要时进行处理。

下面是一个示例代码,演示如何使用PreferenceKey来避免GeometryReader阻止嵌套视图在列表中增长:

代码语言:txt
复制
struct ContentView: View {
    @State private var itemHeights: [CGFloat] = []
    
    var body: some View {
        List {
            ForEach(0..<10) { index in
                GeometryReader { geometry in
                    Text("Item \(index)")
                        .frame(height: self.itemHeights[index])
                        .background(GeometryReader {
                            Color.clear
                                .preference(key: ItemHeightKey.self, value: geometry.size.height)
                        })
                }
                .onPreferenceChange(ItemHeightKey.self) { height in
                    self.itemHeights[index] = height
                }
            }
        }
    }
}

struct ItemHeightKey: PreferenceKey {
    static var defaultValue: [CGFloat] = []
    
    static func reduce(value: inout [CGFloat], nextValue: () -> [CGFloat]) {
        value.append(contentsOf: nextValue())
    }
}

在上面的代码中,我们创建了一个名为ItemHeightKey的PreferenceKey,用于存储每个项目的高度。在每个项目的GeometryReader中,我们将高度存储为Preference,并在onPreferenceChange中更新itemHeights数组。

通过这种方式,我们可以避免GeometryReader阻止嵌套视图在列表中增长。请注意,这只是一个示例代码,实际使用时可能需要根据具体情况进行调整。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),腾讯云云数据库MySQL版(CDB),腾讯云云原生容器服务(TKE)。

腾讯云产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券