SwiftUI:如何让TextField完全不可编辑但保留滚动触摸功能
解决方案
要实现可滚动但完全不可编辑的TextField,核心是用readOnly(true)替代disabled(true),同时结合行限制设置:
关键代码示例
TextField("展示文本", text: .constant("这里是超长文本内容,当长度超过设置的行限制时,TextField会自动允许滚动查看全部内容,不会截断文本")) .lineLimit(2) // 设置允许显示的最大行数,超过则触发滚动 .readOnly(true)
方案说明
readOnly(true):仅禁用文本编辑功能,保留TextField的滚动、文本选中(如果需要)等交互能力,不会像disabled(true)那样完全锁死所有交互。- 绑定
constant文本+readOnly:彻底阻断用户输入操作,不会出现“能输入一个字符后消失”的问题,因为输入框根本不会响应输入事件。
如果需要进一步优化视觉反馈(比如让输入框看起来更像纯文本展示),可以额外添加样式调整:
TextField("展示文本", text: .constant("超长示例文本")) .lineLimit(2) .readOnly(true) .background(Color.clear) // 移除输入框背景 .disabled(false) // 保持交互状态,确保滚动正常
内容的提问来源于stack exchange,提问作者janineanne
相关产品推荐
相关产品推荐

