SwiftUI TextField指定axis后占位符文本对齐失效求助
SwiftUI TextField指定axis:.vertical后占位符对齐异常的解决办法
当给SwiftUI TextField设置axis: .vertical后,multilineTextAlignment(.center)仅能让输入文本居中,系统默认的占位符会固定显示在topLeading位置,无法通过该修饰符调整对齐方式——这是SwiftUI的已知布局bug,未指定axis时则无此问题。
解决方法:自定义占位符替代系统默认实现
通过overlay自定义占位符,完全控制其对齐逻辑,代码示例如下:
TextField("", text: $userAnswer, axis: .vertical) .fontWeight(.heavy) .multilineTextAlignment(.center) .cornerRadius(15) .textFieldStyle(.roundedBorder) .lineLimit(2...4) // 自定义居中占位符 .overlay( Group { // 仅在文本为空且未聚焦时显示占位符 if userAnswer.isEmpty && !answerFieldFocus { Text("Answer") .fontWeight(.heavy) .foregroundColor(.placeholderText) // 匹配系统占位符颜色 .multilineTextAlignment(.center) } }, alignment: .center ) .overlay( Divider() .frame(maxWidth: 300, maxHeight:1) .background(.black), alignment: .bottom) .padding([.bottom,.top]) .padding([.leading,.trailing], 25) .focused($answerFieldFocus)
原理说明
将系统占位符参数留空,通过overlay在TextField上层添加条件显示的Text组件,仅当文本为空且输入框未聚焦时展示,完全复用输入文本的字体、颜色和对齐设置,确保视觉一致性。这种纯SwiftUI实现方式无需依赖UIKit桥接,兼容性更好。
内容的提问来源于stack exchange,提问作者SereneYeti
相关产品推荐
相关产品推荐

