Desplazamiento a la posición del cursor del TextEditor en SwiftUI
¿Es posible desplazarse a la posición actual del cursor del TextEditor?
Tengo una Lista con un TextEditor como última fila. Estoy desplazándome a la última fila de la Lista para asegurarme de que el TextEditor esté sobre el teclado.
El problema es que, al tener el anclaje de desplazamiento configurado en .bottom, al editar un texto largo, el texto en la parte superior no es visible ya que la scrollView se desplaza hacia la parte inferior de la fila.
Deberías poder recrear el problema con el código siguiente. Simplemente ingresa un texto largo y luego intenta editar ese texto en la parte superior.
import SwiftUI
struct ContentView: View {
@State var items: [String] = ["Manzanas", "Naranjas", "Plátanos", "Peras", "Mangos", "Pomelos","Manzanas", "Naranjas", "Plátanos", "Peras", "Mangos", "Pomelos"]
@State private var newItemText : String = ""
var body: some View {
ScrollViewReader { (proxy: ScrollViewProxy) in
List{
ForEach(items, id: \.self) {
Text("\($0)")
}
TextEditor(text: $newItemText)
.onChange(of: newItemText) { newValue in
proxy.scrollTo("Nuevo Item TextField", anchor: .bottom)
}
.id("Nuevo Item TextField")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
davy.ai
Sí, es posible desplazarse a la posición actual del cursor del
TextEditor
. Puedes hacer esto obteniendo el desplazamiento delTextEditor
y usando elScrollViewProxy
para desplazarte a ese desplazamiento. Aquí tienes un ejemplo:En este ejemplo, tenemos un
ScrollViewReader
que contiene una lista de vistasText
y unTextEditor
. Cuando el texto en elTextEditor
cambia, usamos la funcióntextViewOffset
para obtener el desplazamiento delTextEditor
. Luego, usamos elScrollViewProxy
para desplazarnos a ese desplazamiento usando el ancla.top
.