删除第一个字符时,SwiftUI TextField冻结

时间:2020-01-31 02:26:11

标签: swiftui

在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 个答案:

答案 0 :(得分: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提交雷达报告,但在此寻求更好的解决方案。