ios - uicollectionviewcontroller - ¿Cómo crear un pie de página "adhesivo" para un UICollectionView?
uicollectionviewcell indexpath (2)
¿Cuál es el mejor método para proporcionar un pie de página para un UICollectionView
que se "adhiere" al UICollectionView
inferior de la pantalla en una página determinada? Asuma que UICollectionView
es pantalla completa y solo tiene una sección.
Actualmente estoy proporcionando un objeto UICollectionReusableView
en collectionView:viewForSupplementaryElementOfKind:atIndexPath:
pero (como era de esperar) cuando el contenido de mi colección excede los límites de esta pantalla, el pie de página se saca de la pantalla.
Supongo que la clave es una Vista de Decoración , pero no puedo encontrar ejemplos de buen código (que no sea IB) sobre cómo funcionan, y la documentación de Apple es, en mi opinión, poco clara sobre este tema en particular.
Actualizar re: Vistas de decoración
Después de construir y experimentar con una Vista de decoración ( usando este tutorial ), llegué a algunas limitaciones, a saber, que en realidad no hay ninguna devolución de llamada entre el objeto Decoration View y su objeto controlador UICollectionViewController
( Decoration View está administrado por un objeto UICollectionViewLayout
, no el objeto UICollectionViewController
). Parece que Apple se tomaba muy en serio que Decoration Views se limitara a los adornos visuales, y no a los datos (aunque obviamente podrías hackear esto).
Entonces, la solución "correcta" todavía se me escapa, pero mientras tanto, acabo de crear un objeto UIView
estático y lo estoy gestionando desde mi objeto UICollectionViewController
. Funciona bien, pero se siente mal.
Actualización sobre: VARIOS ENCABEZADOS
En los últimos meses, he trabajado en problemas similares en varios proyectos, y recientemente encontré una solución para HEADERS pegajosos. Supongo que lo mismo se aplicaría a los pies de página, pero no lo he probado.
Detalles sobre los encabezados aquí:
La implementación es bastante pesada, pero parece funcionar bien en la mayoría de las circunstancias.
Si no hay más actividad sobre esta cuestión pronto, cerraré como un duplicado y señalaré el artículo anterior.
Básicamente lo que necesita hacer es proporcionar una subclase UICollectionViewLayout
personalizada que se invalide a sí misma cuando los límites cambian (cuando la vista desplaza los límites cambian). Y luego proporciona UICollectionViewLayoutAttributes
para la vista suplementaria donde se actualiza el centro para abarcar los límites actuales de la vista de colección (arriba, abajo, izquierda, derecha, lo que sea).
Agregué el proyecto en github que demuestra esta estrategia.
ACTUALIZACIÓN: a partir de iOS 9, UICollectionViewFlowLayout
tiene dos propiedades muy útiles que simplifican esta tarea drásticamente. Consulte la sectionHeadersPinToVisibleBounds
y sectionFootersPinToVisibleBounds
.
UICollectionViewController (como UITableVC) es un "acceso directo", estas 2 clases simplemente están reemplazando a UIViewController, crea el collectionView para ti.
Puede hacerlo fácilmente y agregar su vista fija por su cuenta.