Fonts 创建一个足够大的SwiftUI文本字段以容纳字符串
我想使用SwiftUI创建一个足够宽的文本字段,以容纳一定数量的数字。它应该考虑到当前字体,所以我不能使用固定值 我知道我可以使用以下命令获取当前字体:() 并将其转换为带表的UIFont:() 并通过执行以下操作获得字符串的宽度: () 最后适当地设置框架:Fonts 创建一个足够大的SwiftUI文本字段以容纳字符串,fonts,swiftui,textfield,Fonts,Swiftui,Textfield,我想使用SwiftUI创建一个足够宽的文本字段,以容纳一定数量的数字。它应该考虑到当前字体,所以我不能使用固定值 我知道我可以使用以下命令获取当前字体:() 并将其转换为带表的UIFont:() 并通过执行以下操作获得字符串的宽度: () 最后适当地设置框架: .frame(width: "9999".widthOfString(usingFont: UIFont.with(font: font ?? .body))) 但是由于填充的原因,结果框有点太小,整个过程有点复杂
.frame(width: "9999".widthOfString(usingFont: UIFont.with(font: font ?? .body)))
但是由于填充的原因,结果框有点太小,整个过程有点复杂
有更简单的方法吗?您可以创建一个具有最长字符串的
文本,并将其隐藏。然后将实际的文本字段
放入一个覆盖层
:
Text("9999999999")
.opacity(0)
.overlay(TextField("", text: $text))
extension String {
func widthOfString(usingFont font: UIFont) -> CGFloat {
let fontAttributes = [NSAttributedString.Key.font: font]
let size = self.size(withAttributes: fontAttributes)
return size.width
}
}
.frame(width: "9999".widthOfString(usingFont: UIFont.with(font: font ?? .body)))
Text("9999999999")
.opacity(0)
.overlay(TextField("", text: $text))