Ошибка анимации в отношении FocusState TextField.IOS

Программируем под IOS
Ответить
Anonymous
 Ошибка анимации в отношении FocusState TextField.

Сообщение Anonymous »

Вот представление, в котором есть кнопки «Сортировка» и «Отмена» на заднем крае текстового поля. Когда он сфокусирован, я хочу, чтобы он анимировал перемещение кнопок («Кнопка сортировки» и «Отмена»).

Код: Выделить всё

struct TextFieldFocusAnimation: View {
@FocusState private var isFocused: Bool

var body: some View {
HStack {
TextField("", text: .constant(""))
.focused($isFocused)
.border(.red)

if !isFocused {
Button("Sort Button") {
print("Sort clicked")
}
.transition(.move(edge: .leading))
} else {
Button("Cancel") {
isFocused = false
}
.transition(.move(edge: .trailing))
}
}
.padding()
.transformEffect(.identity) // This is to isolate the geometry
.animation(.snappy, value: isFocused)
}
}
Результирующая анимация выглядит следующим образом:
Изображение

Обратите внимание, что кнопки появляются, а не скользят.
Я могу сказать, что переходы обычно ведут себя и при таком коде:
Изображение

Здесь я использовал @State.

Код: Выделить всё

struct NormalPopInAnimation: View {
@State private var isFocused: Bool = false

var body: some View {

VStack {
HStack {
TextField("", text: .constant(""))
.border(.red)

if !isFocused {
Button("Sort Button") {
print("Sort clicked")
}
.transition(.move(edge: .leading))
} else {
Button("Cancel") {
isFocused = false
}
.transition(.move(edge: .trailing))
}
}
.padding()
.transformEffect(.identity)

Button("Toggle") {
isFocused.toggle()
}
}
.animation(.snappy, value: isFocused)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.ignoresSafeArea()

}
}

Я уже изучал изменения анимации в @FocusState SwiftUI и ищу, как это исправить без необходимости вводить другое состояние или, по крайней мере, знать причину, по которой это не работает так, как я думаю.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -textfield
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»