En mi vista de tabla tengo que desplazarme hacia la parte superior. Pero no puedo garantizar que el primer objeto sea la sección 0, fila 0. Puede que mi vista de tabla comience desde la sección número 5.
Entonces recibo una excepción cuando llamo:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
¿Hay otra forma de desplazarse a la parte superior de la vista de tabla?
ios
uitableview
Ilya Suzdalnitski
fuente
fuente
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: true)
parece funcionar en iOS 11Nota : esta respuesta no es válida para iOS 11 y versiones posteriores.
yo prefiero
Si tiene un recuadro superior en su vista de tabla, debe restarlo:
fuente
tableView
tiene un valor distinto de cerocontentInset
desde la parte superior. Por ejemplo:tableView.contentInset = UIEdgeInsetsMake(5.0f, 0.0f, 250.0f, 0.0f);
. Si ese es el caso, en su código setableView
desplaza a(0.0f, 5.0f)
.[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];
-scrollView.adjustedContentInset.top
lugar.Posibles acciones:
1
2
3
4 4
5 5
Deshabilitar Desplazarse hacia arriba:
Modifíquelo y úselo según los requisitos.
Swift 4
fuente
Es mejor no usar NSIndexPath (tabla vacía), ni suponer que el punto superior es CGPointZero (insertos de contenido), eso es lo que uso:
Espero que esto ayude.
fuente
Swift 4 :
Esto funciona muy bien:
fuente
UITableViewStyleGrouped
(los encabezados se desplazan con el contenido) y este código funciona. Asegúrese de estar en el hilo principal e inicie este código después de que aparezca la vista (viewDidAppear
). Si todavía tiene problemas, intente poner el código dentro de esto:DispatchQueue.main.asyncAfter(deadline: .now()+0.1, execute: { // the code }
He encontrado un problema al llamar a probar algunos de los métodos en vacío
tableView
. Aquí hay otra opción para Swift 4 que maneja vistas de tabla vacías.Uso:
fuente
NO USE
A veces puede establecer el desplazamiento incorrectamente. Por ejemplo, en mi caso, la celda estaba en realidad ligeramente por encima de la vista con insertos de área segura. No está bien.
USO EN LUGAR
fuente
En iOS 11, use
adjustedContentInset
para desplazarse correctamente hacia arriba para ambos casos cuando la barra de estado de la llamada está visible o no.Rápido:
fuente
Para las tablas que tienen a
contentInset
, establecer el desplazamiento del contenido enCGPointZero
no funcionará. Se desplazará a la parte superior del contenido frente a la parte superior de la tabla.Tener en cuenta la inserción de contenido produce esto en su lugar:
fuente
Este código te permite desplazarte por una sección específica hacia arriba
fuente
Rápido:
fuente
Swift 3
si
tableView.setContentOffset
no funcionaUtilizar:
fuente
Como mi
tableView
está lleno de todo tipo de insertos, esto fue lo único que funcionó bien:Swift 3
Swift 2
fuente
Además de lo que ya se ha dicho, puede crear una extensión (Swift) o una categoría (Objetivo C) para facilitar esto en el futuro:
Rápido:
Cada vez que desee desplazar cualquier tabla vista hasta la parte superior puede llamar al siguiente código:
fuente
Prefiero lo siguiente, ya que tiene en cuenta un recuadro. Si no hay ningún recuadro, seguirá desplazándose hacia arriba, ya que el recuadro será 0.
fuente
Rápido:
si no tiene encabezado tableView:
si es así :
fuente
Swift 5, iOS 13
Sé que esta pregunta ya tiene muchas respuestas, pero según mi experiencia, solo hay un método que siempre funciona:
tableView.scrollToRow(at: IndexPath(row: someArray.count - 1, section: 0), at: .bottom, animated: true)
Si está trabajando en asíncrono, las tablas que animado con los teclados, etc., las otras respuestas a menudo se desplazamiento para el casi , no el fondo absoluto inferior. Este método lo llevará al final absoluto de una tabla cada vez.
fuente
Esto es lo que uso para funcionar correctamente en iOS 11:
fuente
En Swift 5, gracias @ Adrian responde mucho
Uso:
fuente
Usar contentOffset no es la forma correcta. esto sería mejor ya que es la forma natural de la vista de tabla
fuente
Este fue el único fragmento de código que funcionó para mí
Swift 4:
PS 70 es la altura de mi celda de vista de encabezado y tabla
fuente
llama a esta función donde quieras UITableView desplaza hacia arriba
fuente
Swift 4 a través de la extensión, maneja la vista de tabla vacía:
fuente
Uso tabBarController y tengo algunas secciones en mi vista de tabla en cada pestaña, así que esta es la mejor solución para mí.
fuente
Tuve que agregar la multiplicación por
-1 *
a la suma de la barra de estado y la barra de navegación, porque iba a esa altura de la pantalla,fuente
en rápido
su fila = selectioncellRowNumber su sección si tiene = selectionNumber si no tiene set es cero
//UITableViewScrollPosition.Middle o Bottom o Top
fuente
Aquí está el código para ScrollTableView To Top Programatic
Rápido:
fuente
En Swift-3:
fuente
Si desea mover la animación de desplazamiento en la tabla, use este código. El desplazamiento se mueve hacia arriba con animación en .5 segundos.
fuente
Con Swift:
fuente