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

SwiftUI设置textSelection(.enabled)后选中Text文本点击复制无内容问题

问题原因
  • 这是iOS 15.0 ~ 16.3版本范围内的SwiftUI系统原生bug,textSelection(.enabled)修饰符仅会渲染文本选中的交互UI,系统默认复制逻辑没有正确把对应文本内容写入系统剪贴板。
  • 如果当前Text的父容器存在自定义长按手势、或者嵌套在自定义UIPageViewController等自带手势响应的容器中,父容器手势的识别优先级更高,会拦截Text的默认复制事件,导致剪贴板写入失败。
解决方案

方案1:自定义复制逻辑适配旧系统

如果你的App需要兼容iOS 16.4以下的系统,可以放弃原生textSelection能力,自己通过上下文菜单实现复制能力:

Text("Hello, world!")
    .padding()
    .contextMenu {
        Button {
            UIPasteboard.general.string = "Hello, world!"
        } label: {
            Label("复制", systemImage: "doc.on.doc")
        }
    }

如果需要保留长按选中的高亮效果,可以额外加自定义的选中状态修饰符配合使用。

方案2:修复手势冲突

如果是父容器手势拦截导致的问题,抬高Text的手势优先级即可:

Text("Hello, world!")
    .textSelection(.enabled)
    .padding()
    .highPriorityGesture(LongPressGesture().onEnded { _ in })

方案3:升级最低支持系统版本

苹果已经在iOS 16.4版本修复了这个原生bug,如果你的App最低支持版本可以调整到iOS 16.4及以上,直接使用原生textSelection(.enabled)即可正常触发复制逻辑。

内容的提问来源于stack exchange,提问作者Underthestars-zhy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:09:01