SwiftUI, использование textContentType в текстовом поле вызывает задержку при запуске 14.4.1

#swift #swiftui

Вопрос:

Я вижу эту проблему в своем основном приложении, поэтому я собрал здесь простое небольшое приложение с одним текстовым полем. Установка .textContentType в текстовом поле приведет к тому, что приложение будет заикаться и запаздывать при относительно быстром вводе текста на клавиатуре. Использование .emailAdress кажется худшим, так как .givenName было немного лучше, но все равно отставание было заметным. Добавление или удаление .keyboardType не повлияло на мою проблему. Я тестирую физический iPhone 12 под управлением 14.4.1.

 struct ContentView: View {
    @State var text = ""
    var body: some View {
        ZStack {
            Color.red
            VStack {
                TextField("TextField", text: $text)
                    .textContentType(.emailAddress) //comment this out and lag is gone
                    .background(Color.green)
            }
        }
        .onTapGesture {
            self.hideKeyboard()
        }
    }
}

extension View {
    func hideKeyboard() {
        UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), 
                                        to: nil, from: nil, for: nil)
    }
}

 

Любая помощь будет очень признательна.

Комментарии:

1. попробовал ваш код, он очень хорошо работает для меня, никаких задержек. Протестировано с и без, следующее: .onTapGesture и .disableAutocorrection(true) попробуйте удалить .onTapGesture , чтобы увидеть, имеет ли это значение.

2. @workingdog, Попробовал оба предложения и не вижу разницы. Я сделал проект в UIKit и вижу ту же проблему. Можете ли вы сообщить мне, какое устройство и версию iOS вы используете?

3. ха да, извините, я на macos 12.бета, xcode 13.бета, нацелен на ios 15 и macCatalyst 12. Протестировано на macOS 12 и iPhone 10 ios 15 и старше iPad 14.7.1. Я забыл, что вы используете более старую ios.

Ответ №1:

Итак, я обновил свою iOS до ОС 14.7.1, как использовал @workingdog, и это, казалось, решило мою проблему. Как я уже говорил ранее, я использовал 14.4.1, и, должно быть, это была проблема с операционной системой. Проблема устранена при обновлении операционной системы. Спасибо!