SwiftUI TextField зависает при удалении первого символа - PullRequest
1 голос
/ 31 января 2020

При указании минимального значения ScaleFactor для TextField в SwiftUI 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 Ответ

1 голос
/ 31 января 2020

Проблема, похоже, связана с взаимодействием пользовательского шрифта. Очевидно, что мое приложение использует пользовательские шрифты, но здесь я просто хотел упростить код.

Этот код не завершится ошибкой, если вы не используете пользовательский шрифт или если вы не укажете minimalScaleFactor. Я нашел обходной путь, который не очень элегантен, но работает до тех пор, пока 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, но ищу лучшее решение проблемы здесь.

...