如何修改SwiftUI中drag&drop拖拽预览的背景色与形状
解决方案
你遇到的两个问题都是SwiftUI默认拖拽预览机制导致的,直接通过自定义onDrag的预览视图即可解决,优先选择ScrollView方案更易控制效果,完整实现代码如下:
第一步:保持原有ListItemView不变
struct ListItemView: View { let index: Int var body: some View { HStack { Text("Item \(index)") .foregroundColor(.white) Spacer() } .padding() .background(Color.gray) .clipShape(RoundedRectangle(cornerRadius: 16.0)) } }
第二步:修改ScrollView实现,添加自定义拖拽预览
struct ContentView: View { var body: some View { ScrollView { ForEach(0 ..< 10, id: \.self) { i in ListItemView(index: i) .padding(.horizontal, 8) .padding(.bottom, 8) .onDrag { NSItemProvider(object: "item_\(i)" as NSString) } preview: { // 直接使用原列表项作为拖拽预览,保证尺寸、样式完全一致 ListItemView(index: i) } } } .background(Color.black) } }
原方案问题说明
- List方案的白色外框是List行控件的私有默认行为,系统生成拖拽预览时会强制带上行容器的默认白色背景,即使设置了
listRowBackground为透明也无法规避,不建议在此基础上修改。 - 原生ScrollView的
onDrag默认会对视图截图后添加缩放、阴影效果,自定义preview参数后会完全替换系统默认预览,直接保留原视图的所有样式和尺寸,完全满足你提出的两个要求。
内容的提问来源于stack exchange,提问作者agoncharov
相关产品推荐
相关产品推荐

