新手问题。如何将 TextField 的水平大小设置为 N 个字符

Posted

技术标签:

【中文标题】新手问题。如何将 TextField 的水平大小设置为 N 个字符【英文标题】:Newbie question. How to set TextField's horizontal size to N characters 【发布时间】:2021-06-28 16:32:33 【问题描述】:

对不起,如果问题已经回答。我是 Swift 新手,我想为一次性密码创建一个简单的固定大小 TextField

TextField("******", text: self.$otp)
                    .padding()
                    .textContentType(.oneTimeCode)
                    .keyboardType(.numberPad)

我希望在 html 中找到类似于<input size="6"/> 的配置参数,以便引擎自动计算TextFieldN 字符大小。

是否有一个简单的解决方案,而无需像我看到一些爱好者建议的那样使用ZStacks 和产生N 文本字段这样的麻烦?

【问题讨论】:

6个字符的宽度取决于这6个字符是什么。如果不打开 monospacedDigit,即使数字也不是一致的宽度。有些字符非常宽(﷽ 是一个“字符”),有些字符非常窄(i),那么您希望宽度基于什么? 查看这个帖子:***.com/a/68167518/14733292 @RobNapier 后端正在发送 6 个 ASCII 数字。假设我打开了monospacedDigit,这可能吗?怎么做?我应该预先计算单个字符的大小并将其乘以 N 吗? @RajaKishan 谢谢,但这大约是最大长度,而我需要一个固定大小的解决方案。 是的;计算出您认为的尺寸,并将宽度设置为您想要的。小心动态文本,如果它没有锁定到特定大小,它可能会调整你的字体大小。如果您需要处理这个问题,请参阅***.com/questions/65710895/… 了解如何知道大小,或者您可以使用 GeometryReader 动态计算出正确的大小,但这需要更多的工作。 (如果您需要,请告诉我;我会写下来。) 【参考方案1】:

使用固定大小TextField

TextField("******", text: $text).fixedSize()

【讨论】:

我会四处走动,说那不是他想要的。 developer.apple.com/documentation/swiftui/text/fixedsize() 试过了,该字段随着用户类型而增长。 我有点惊讶,但这实际上是正确的方法。我没想到它会起作用。问题是* 小于一个数字。如果您制作占位符文本888888 并分配一个等宽数字字体,这种方法绝对有效。我没想到……(如果您分配固定宽度的字体,这也会起作用)实际上,如果您将占位符文本更改为 8 *s 而不是 6,它也会“起作用” @RobNapier 你是对的,它有效,我正在使用空占位符进行测试,我的错。 @andbi 请接受这个答案,这是一个很好的答案,意思是:点击复选标记【参考方案2】:

您可以将框架用于此类任务:

TextField(title, text: binding).frame(height: 40)

TextField(title, text: binding).frame(width: 40)

【讨论】:

这正是问题所在:如何将字符数转换为帧宽?

以上是关于新手问题。如何将 TextField 的水平大小设置为 N 个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIStackView 按比例调整大小?

如何将四个按钮水平和垂直居中?

如何根据 TextField 的可见大小限制 UITextField 的输入文本量?

如何更改 TextField 中的字段大小?

如何将工具提示设置为输入类型为文件的 Ext.form.TextField?

如何使用 Xcode 约束使 TextField 居中?