SwiftUI中SecureField是否有textFieldLeader的替代方案?
解决SecureField添加图标时的左侧内边距问题
首先你代码里的textFieldLeader是未定义变量,这是直接报错的原因。另外SecureField和TextField一样支持padding修饰符,不存在“没有此选项”的情况,以下是两种可行的解决方案:
方案1:修复现有代码(补全变量定义)
在结构体里补上textFieldLeader的常量定义,可根据视觉需求调整数值:
struct PasswordInputView: View { @Binding var password: String let placeholder: String let sfSymbol: String? // 定义内边距基准值,可按需修改 private let textFieldLeader: CGFloat = 28 var body: some View { SecureField(placeholder, text: $password) .frame(maxWidth: .infinity, minHeight: 44) .padding(.leading, sfSymbol == nil ? textFieldLeader / 2 : textFieldLeader) .background( ZStack { if let systemName = sfSymbol { Image(systemName: systemName) .font(.system(size: 16, weight: .semibold)) .padding(.leading, 5) .foregroundColor(Color.gray.opacity(0.5)) } RoundedRectangle(cornerRadius: 10, style: .continuous) .stroke(Color.gray.opacity(0.25)) } ) } }
方案2:更优雅的HStack布局(推荐)
手动计算内边距容易出现适配问题,用HStack组合图标和SecureField,让布局自动适配:
struct PasswordInputView: View { @Binding var password: String let placeholder: String let sfSymbol: String? var body: some View { HStack(spacing: 8) { // 按需显示图标 if let systemName = sfSymbol { Image(systemName: systemName) .font(.system(size: 16, weight: .semibold)) .foregroundColor(Color.gray.opacity(0.5)) .padding(.leading, 5) } // SecureField占满剩余空间 SecureField(placeholder, text: $password) .frame(maxWidth: .infinity, minHeight: 44) } .background( RoundedRectangle(cornerRadius: 10, style: .continuous) .stroke(Color.gray.opacity(0.25)) ) .padding(.horizontal, sfSymbol == nil ? 14 : 5) } }
这种方式无需手动计算输入框的左侧内边距,HStack会自动管理图标与输入框的间距,适配不同屏幕尺寸更稳定。
内容的提问来源于stack exchange,提问作者user14263509
相关产品推荐
相关产品推荐

