You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中drawingGroup()导致屏幕外图像丢失的解决办法

问题解决:drawingGroup导致滚动视图屏幕外内容消失

你遇到的是drawingGroup的默认行为——它会将视图树渲染成单个位图,为了性能优化,默认仅渲染当前可见区域,滚动时未预渲染的屏幕外内容就会消失。以下是几种可行的解决办法:

方法1:明确指定容器尺寸 + 关闭不透明优化

给包含滚动内容的容器设置明确的尺寸,同时给drawingGroup传递opaque: false参数,让系统知道需要渲染整个内容范围,而非仅可见区域:

struct Example: View {
    var body: some View {
        VStack {
            Spacer()
            ScrollView(.horizontal) {
                HStack(alignment: .center, spacing: 0) {
                    Image("ExampleImage")
                        .frame(width: 100, height: 100)
                    Rectangle()
                        .frame(width: 50, height: 50)
                }
                .frame(width: 150) // 明确设置HStack总宽度
                .drawingGroup(opaque: false)
            }
            Spacer()
        }
    }
}

方法2:仅对需要性能优化的子视图应用drawingGroup

不要把drawingGroup加在整个滚动容器上,而是只针对叠加复杂、拖慢性能的子视图组合使用,避免破坏滚动内容的整体布局和渲染逻辑:

struct Example: View {
    var body: some View {
        VStack {
            Spacer()
            ScrollView(.horizontal) {
                HStack(alignment: .center, spacing: 0) {
                    // 仅对需要优化的叠加视图组应用drawingGroup
                    ZStack {
                        Image("ExampleImage")
                            .frame(width: 100, height: 100)
                        // 这里放置其他叠加的复杂视图
                    }
                    .drawingGroup()
                    
                    Rectangle()
                        .frame(width: 50, height: 50)
                }
            }
            Spacer()
        }
    }
}

方法3:禁用内容裁剪

给滚动内容添加.contentClippingDisabled(),强制系统渲染整个内容区域,即使部分内容处于屏幕外:

struct Example: View {
    var body: some View {
        VStack {
            Spacer()
            ScrollView(.horizontal) {
                HStack(alignment: .center, spacing: 0) {
                    Image("ExampleImage")
                        .frame(width: 100, height: 100)
                    Rectangle()
                        .frame(width: 50, height: 50)
                }
                .drawingGroup()
                .contentClippingDisabled() // 禁用内容裁剪
            }
            Spacer()
        }
    }
}

内容的提问来源于stack exchange,提问作者programr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:22:17