【问题标题】:SwiftUI TextField freezes when deleting first character删除第一个字符时,SwiftUI TextField 冻结
【发布时间】: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)
    }
}

【问题讨论】:

    标签: swiftui


    【解决方案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 提交雷达,但在这里寻找更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2022-10-20
      • 2011-06-24
      • 2011-05-29
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多