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)
...