删除第一个字符时,SwiftUI TextField 冻结
Posted
技术标签:
【中文标题】删除第一个字符时,SwiftUI TextField 冻结【英文标题】:SwiftUI TextField freezes when deleting first character 【发布时间】:2020-01-31 02:26:11 【问题描述】:在 SwiftUI 中为 TextField 指定 minimumScaleFactor 时,TextField 会在您输入文本时正常运行,并在内容不适合 TextView 时减小指定的字体。但是,如果您开始删除字符,一切都会照常进行,直到您删除第一个字符。一切都冻结了。
一开始我认为这是我处理存储文本的变量的方式,在我的应用程序中我将它作为 ObservedObject。但是,在调试冻结的应用程序后,我注意到代码在 TextField 的绘图周围一遍又一遍地循环,一个又一个的函数都指向屏幕上对象绘图的错误。
以下代码说明了这个问题。当您输入字符并删除它们直到您到达第一个字符时,TextField 可以完美运行。它冻结了。
import SwiftUI
struct ContentView: View
@State var sensorNumber: String = ""
var body: some View
TextField("WC0.000.000.000", text: $sensorNumber)
.padding(.all, 5.0)
.font(Font.custom("Helvetica", size:40.0))
.minimumScaleFactor(0.90)
【问题讨论】:
【参考方案1】:问题似乎与自定义字体的交互有关。显然,我的应用程序使用的是自定义字体,但在这里我只是想简化代码。
如果您不使用自定义字体或未指定 minimumScaleFactor,则此代码不会失败。我找到了一个不是很优雅的解决方法,但在 Apple 修复此错误之前它可以工作:
import SwiftUI
struct ContentView: View
@State var sensorNumber: String = ""
var body: some View
TextField("WC0.000.000.000", text: $sensorNumber)
.padding(.all, 5.0)
.font(Font.custom("Helvetica", size:40.0))
.minimumScaleFactor(sensorNumber.count < 2 ? 1.0 : 0.90)
我正在向 Apple 提交雷达,但在这里寻找更好的解决方案。
【讨论】:
以上是关于删除第一个字符时,SwiftUI TextField 冻结的主要内容,如果未能解决你的问题,请参考以下文章
在添加和删除第二个按钮时保持 SwiftUI 中的导航项按钮对齐