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

SwiftUI拖拽元素未立即消失:移至目标中心延迟消失问题

SwiftUI拖拽元素放下后移至目标中心再消失的问题修复

问题现象

在Xcode 16、iOS 18环境下实现SwiftUI拖拽功能时,拖拽元素被放下后,会先以动画形式移动到放置目标的中心,停留约一秒后才消失,不符合预期的立即消失效果。

问题代码

@State var message = "Drop It Like It's Hot"
var body: some View {
    HStack {
        HStack {
            Text(message).padding(50)
            Spacer()
        }
        .frame(width: 300)
        .background(.green)
        .dropDestination(for: String.self) { items, location in
            if let item = items.first {
                message = item
            }
            return true
        }

        VStack {
            Text("Item 1").padding(50).draggable("Item 1")
            Text("Item 2").padding(50).draggable("Item 2")
            Text("Item 3").padding(50).draggable("Item 3")
        }
    }
}

原因分析

这是iOS 18(SwiftUI 6)新增的默认拖拽预览行为:当使用无自定义预览的draggable(_:)方法时,系统会自动生成一个与源视图一致的预览视图,并且在拖拽完成后执行这个"归位到放置目标中心"的动画,作为默认的交互反馈。

修复方案

通过为draggable添加自定义预览视图,覆盖系统默认的预览行为,即可让拖拽元素在放下后立即消失。修改后的代码如下:

@State var message = "Drop It Like It's Hot"
var body: some View {
    HStack {
        HStack {
            Text(message).padding(50)
            Spacer()
        }
        .frame(width: 300)
        .background(.green)
        .dropDestination(for: String.self) { items, location in
            if let item = items.first {
                message = item
            }
            return true
        }

        VStack {
            // 为每个draggable添加自定义预览
            Text("Item 1")
                .padding(50)
                .draggable("Item 1") {
                    Text("Item 1").padding(50)
                }
            
            Text("Item 2")
                .padding(50)
                .draggable("Item 2") {
                    Text("Item 2").padding(50)
                }
            
            Text("Item 3")
                .padding(50)
                .draggable("Item 3") {
                    Text("Item 3").padding(50)
                }
        }
    }
}

你也可以根据需求自定义预览视图的样式,只要明确指定了预览内容,系统就不会启用默认的归位动画。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:04:54