SwiftUI - изменение состояния в UITextField приводит к неконтролируемому росту frameWidth и игнорированию границ / кадра

Я использую SwiftUI и соединяю UITextField (мне нужно назначить firstResponder). Я использую код отсюда: SwiftUI: как сделать TextField первым респондентом?

Следующий код обновляет мою @Binding var. Это, конечно, предполагаемое поведение. Проблема в том, что это заставляет textField игнорировать фрейм / границы. Он просто расширяется и выталкивает другие элементы из поля зрения. Другие части представления также зависят от @State.

func textFieldDidChangeSelection(_ textField: UITextField) {
            text = textField.text ?? ""
}

Как я могу обновить @State и по-прежнему сохранить текстовое поле во фрейме?

1 ответ

Решение

Вам нужно уменьшить приоритет сопротивления контента в makeUIView (поэтому контент не будет подталкивать внешний макет, установленный в SwiftUI), как показано ниже

func makeUIView(context: UIViewRepresentableContext<MyField>) -> UITextField {
    let field = UITextField(frame: .zero)
    field.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    ...
Другие вопросы по тегам