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

iOS 18中SwiftUI List内.textSelection(.enabled)失效求解决方案

iOS 18中SwiftUI List内textSelection失效的解决办法

在iOS 18中,SwiftUI的textSelection(_:)修饰器直接作用于List内的Text组件时,无法正常启用文本复制功能,但该功能在iOS 17及更早版本中可正常工作。以下是几个可行的解决办法:

方案1:将textSelection修饰器添加到List上

把textSelection(.enabled)直接应用到List容器上,而非单个Text组件,这样列表内所有文本都会支持选择复制:

struct ContentView: View {
    var body: some View {
        List {
            Text("Hello World")
            Text("Another selectable text")
        }
        .textSelection(.enabled)
    }
}

方案2:用ScrollView替代List

如果不需要List的特定样式(如默认行分隔符、滑动操作等),可以用ScrollView配合VStack替代,此时单个Text的textSelection能正常生效:

struct ContentView: View {
    var body: some View {
        ScrollView {
            VStack(spacing: 12) {
                Text("Hello World")
                    .textSelection(.enabled)
                Text("Another selectable text")
                    .textSelection(.enabled)
            }
            .padding()
        }
    }
}

方案3:封装UIKit的可选择文本组件

通过UIViewRepresentable封装UIKit的UILabel,手动开启文本选择功能,这种方式在List内可以稳定工作,还能自定义文本样式:

struct SelectableText: UIViewRepresentable {
    let text: String
    let font: UIFont?
    
    init(text: String, font: UIFont? = UIFont.systemFont(ofSize: 17)) {
        self.text = text
        self.font = font
    }
    
    func makeUIView(context: Context) -> UILabel {
        let label = UILabel()
        label.text = text
        label.font = font
        label.isUserInteractionEnabled = true
        label.isSelectable = true
        label.numberOfLines = 0
        return label
    }
    
    func updateUIView(_ uiView: UILabel, context: Context) {
        uiView.text = text
        uiView.font = font
    }
}

// 使用示例
struct ContentView: View {
    var body: some View {
        List {
            SelectableText(text: "Hello World")
            SelectableText(text: "Multi-line selectable text that works in List on iOS 18", font: .systemFont(ofSize: 16))
        }
    }
}

这些方案各有适用场景:方案1操作最简单,适合需要全局开启列表文本选择的场景;方案2适合对列表样式要求不高的情况;方案3灵活性最高,能满足自定义文本样式和选择行为的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:05:08