SwiftUI白色视图中TextField占位符显示异常、预览正常如何解决?
问题解决思路
- 修复padding冲突
你在UsernameTextField的TextField上先设置了.padding(50),之后又限定了.frame(height: 48),上下总计100的内边距远大于控件本身的高度,会导致文本区域被挤压裁切,占位符就会出现显示模糊、不全甚至颜色异常的问题。同时你在LoginForm中给UsernameTextField又加了一层.padding(50),多重padding叠加也可能导致TextField超出父视图边界被裁切,预览中因为渲染规则宽松不会触发异常,真机/模拟器运行时就会出现显示问题。建议先移除多余的padding,仅保留必要的内边距即可,修改后可以给TextField临时加.border(.red)查看实际渲染边界是否正常。 - 排查自定义修饰符影响
你调用的.underlineTextField()是自定义下划线修饰符,可能内部覆盖了TextField的默认前景色、占位符属性,甚至添加了多余的视图遮挡,可先注释掉该修饰符测试占位符是否恢复正常显示。 - 改用自定义占位符实现
如果系统默认占位符的颜色修改不生效,可以直接用自定义占位符方案,完全自主控制占位符的样式:
struct UsernameTextField: View { @Binding var userNumber: String var body: some View { ZStack(alignment: .leading) { if userNumber.isEmpty { Text("Phone number") .foregroundColor(.gray) // 可自由修改为需要的颜色 .padding(.leading, 4) } TextField("", text: $userNumber) .onChange(of: userNumber, perform: { value in userNumber = formatNumberTextField(pattern: "+X(XXX) XXX XX XX", phoneNumber: userNumber) }) .frame(height: 48) .cornerRadius(16) .foregroundColor(.black) .accentColor(.black) .padding([.leading, .trailing], 10) .underlineTextField() } } }
内容的提问来源于stack exchange,提问作者Abrcd18
相关产品推荐
相关产品推荐

