新手问题。如何将 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"/>
的配置参数,以便引擎自动计算TextField
的N
字符大小。
是否有一个简单的解决方案,而无需像我看到一些爱好者建议的那样使用ZStack
s 和产生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 个字符的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 TextField 的可见大小限制 UITextField 的输入文本量?