¿Cómo hago un desplazamiento UIScrollView a la parte superior?
ios
objective-c
iphone
uiscrollview
uikit
Jack Humphries
fuente
fuente
UIScrollView
contentInset
, lamentablemente.[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
hace el trabajo por mí[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:YES];
Funciona en iOS 6 y 7[scrollView setContentOffset:CGPointMake(0, scrollView.contentSize.height-scrollView.frame.size.height) animated:YES];
Aquí hay una extensión Swift que lo hace fácil:
Uso:
fuente
iOS 11 y superior
intenta trabajar con el nuevo
adjustedContentInset
.Por ejemplo (desplazarse hacia arriba):
fuente
Para Swift 4
fuente
Utilizar
setContentOffset:animated:
fuente
Respuesta para Swift 2.0 / 3.0 / 4.0 y iOS 7+:
fuente
En iOS7 tuve problemas para obtener una vista de desplazamiento particular para ir a la parte superior, que funcionó en iOS6, y usé esto para configurar la vista de desplazamiento para ir a la parte superior.
fuente
Versión Swift 3.0.1 de la respuesta de rob mayoff :
fuente
Para replicar completamente el comportamiento scrollToTop de la barra de estado, no solo tenemos que configurar contentOffset, sino que también queremos asegurarnos de que se muestren los scrollIndicators. De lo contrario, el usuario puede perderse rápidamente.
El único método público para lograr esto es
flashScrollIndicators
. Desafortunadamente, llamarlo una vez después de configurar contentOffset no tiene ningún efecto porque se restablece de inmediato. Descubrí que funciona cuando hago el flash cada vezscrollViewDidScroll:
.En su UIScrollViewDelegate (o UITable / UICollectionViewDelegate) implemente esto:
El retraso de ocultar es un poco más corto en comparación con el comportamiento scrollToTop de la barra de estado, pero aún se ve bien.
Tenga en cuenta que estoy abusando de la etiqueta de vista para comunicar el estado "isScrollingToTop" porque necesito esto en los controladores de vista. Si está usando etiquetas para otra cosa, es posible que desee reemplazar esto con un iVar o una propiedad.
fuente
Creo que tengo una respuesta que debería ser totalmente compatible con iOS 11, así como con versiones anteriores (para desplazamiento vertical)
Esto tiene en cuenta el nuevo ajustadoContentInset y también tiene en cuenta el desplazamiento adicional requerido cuando prefiereLargeTitles está habilitado en la de navegación, que parece requerir un desplazamiento adicional de 52 píxeles además del valor predeterminado.
Esto fue un poco complicado porque el ajustadoContentInset cambia según el estado de titleBar (título grande vs título pequeño), por lo que necesitaba verificar y ver cuál era la altura de titleBar y no aplicar el desplazamiento de 52px si ya está en el estado grande. No se pudo encontrar ningún otro método para verificar el estado de la barra de navegación, por lo que si alguien tiene una mejor opción que ver si la altura es> 44.0, me gustaría escucharla.
Inspirado en la solución de Jakub
fuente
Es muy común cuando su barra de navegación se superpone a la pequeña porción del contenido scrollView y parece que el contenido no comienza desde la parte superior. Para arreglarlo hice 2 cosas:
fuente
Desplazarse hasta parte superior de
UITableViewController
,UICollectionViewController
o cualquieraUIViewController
que tengaUIScrollView
fuente
En SWIFT 5, simplemente configure la compensación de contenido en cero
fuente
Lo intenté de todas las formas. Pero nada funcionó para mí. Finalmente me gustó esto.
yo añadí
self.view .addSubview(self.scroll)
línea de código en el viewDidLoad. Después de comenzar a configurar el marco para la vista de desplazamiento y agregar componentes a la vista de desplazamiento.Funcionó para mi.
Asegúrese de agregar una
self.view .addSubview(self.scroll)
línea al principio. entonces puede agregar elementos de la interfaz de usuario.fuente