SwiftUI中如何修改TextField的占位符字体?
SwiftUI 修改TextField占位符字体的实现方法
你碰到的报错本质是旧版TextField初始化器的第一个参数只接受字符串(遵循StringProtocol的类型),你直接传加了字体修饰的Text视图不符合参数类型要求,自然会报类型匹配错误。
根据项目支持的最低系统版本,选对应实现即可:
通用兼容方案(无系统版本限制)
直接在TextField上叠加自定义的占位Text,自行根据输入内容是否为空控制占位符显隐,所有样式完全可控,兼容所有iOS版本:
struct DemoView: View { @State private var text = "" var body: some View { TextField("", text: $text) .overlay(alignment: .leading) { if text.isEmpty { Text("Placeholder") .font(.custom("font-name", size: 22)) .foregroundColor(.secondary) .allowsHitTesting(false) } } .padding() } }注意叠加的占位Text必须加
.allowsHitTesting(false),不然会挡住输入框的点击、编辑交互。iOS15+ 原生方案
iOS 15开始苹果给TextField新增了
prompt参数,这个参数就是用来放自定义占位符的,接收Text类型,可以直接给它设置字体、颜色等任意样式,不需要自己处理显隐逻辑,和系统默认占位符的行为完全一致:struct DemoView: View { @State private var text = "" var body: some View { if #available(iOS 15.0, *) { TextField( "", text: $text, prompt: Text("Placeholder") .font(.custom("font-name", size: 22)) .foregroundColor(.secondary) ) .padding() } } }
内容的提问来源于stack exchange,提问作者Neph Muw
相关产品推荐
相关产品推荐

