UICollectionView dentro del contenedor UIView: didSelectRowAtIndexPath no recibe una llamada después del desplazamiento

Tengo 3 UIViews Header / Tabar / Container embeddeds en un ScrollView en un ViewController. Entonces esta es mi estructura:

introduzca la descripción de la imagen aquí

En el ContainerView, cargo un UICollectionView (como este):

let controller = storyboard!.instantiateViewControllerWithIdentifier("myCollectionViewController") as! myCollectionViewController controller.delegate = self self.addChildViewController(controller) controller.view.backgroundColor = UIColor.brownColor() self.containerView.addSubview(controller.view) controller.didMoveToParentViewController(self) 

Todo funciona perfectamente, cada celda de UICollectionView está cargada, … El único problema es que todas las celdas ocultas (e incluso todas las partes de celdas que están ocultas) no se pueden seleccionar. Lo que quiero decir es que mi function "didSelectRowAtIndexPath" no funciona para cada píxel de la primera pantalla. Este es un esquema de mi problema:

Esto es lo que tengo antes del desplazamiento (a la izquierda hay un esquema, a la derecha es lo que realmente tengo en la pantalla) -> aquí todo funciona bien:

introduzca la descripción de la imagen aquí

Esto es lo que tengo después del desplazamiento (a la izquierda hay un esquema, a la derecha es lo que realmente tengo en la pantalla) -> solo los píxeles que se mostraron antes del desplazamiento pueden llamar a "didSelectRowAtIndexPath":

introduzca la descripción de la imagen aquí

El problema reside en el hecho de que self.view.frame no se está actualizando bien. ¿Tienes una idea de cómo debo cambiar este marco y cuándo?

Definición del problema:

Todo el time que enfrentamos una situación fue nuestro UIViewController , además de la vista scroller, muestra encabezados y barras de tabs. El problema es que esas vistas adicionales networkingucen el área asociada a nuestro scroller (en este caso UICollectionView ). En dispositivos de pantalla pequeña, nuestro desplazador mostrará una pequeña cantidad de elementos a la vez.

Solución propuesta:

Permita que esas vistas adicionales se desplacen junto con los elementos de desplazamiento.

¿Cómo aplicarlo?

La solución más conveniente para lograr eso. Aparece en la vista Scroller View. UICollectionView por ejemplo, proporciona elementos suplementarios (Encabezados y pies de página) que se desplaza con los elementos de vista de colección. Mueva su encabezado y barra de tabs al área de encabezado de UICollectionView . luego, implementa viewForSupplementaryElementOfKind en tu controller de vista:

 - (nonnull UICollectionReusableView *)collectionView:(nonnull UICollectionView *)collectionView viewForSupplementaryElementOfKind:(nonnull NSString *)kind atIndexPath:(nonnull NSIndexPath *)indexPath { UICollectionReusableView *reusableview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"Header1" forIndexPath:indexPath]; return reusableview; } 

Interface Builder: el área del encabezado para UICollectionView ya existe. Pero, necesita establecer la altura para ello a través del generador de interfaces para que aparezca en el time de layout. No olvide configurar el identificador de la vista reutilizable de la colección para el encabezado.

introduzca la descripción de la imagen aquí

Nota: Esto también requiere un trabajo adicional para configurar los gestos en su encabezado y TabBar.

Actualizar:

Considere eliminar el encabezado y el contenedor de la barra de tabs y vuelva a agregarlo como una subvista en su lugar correcto en time de ejecución. cuando se hace clic en la ficha UICollectionView, pásala a la vista reutilizable del encabezado en el método viewForSupplementaryElementOfKind . cuando se hace clic en una pestaña de tags, agréguela en la parte superior de la vista del contenedor de tags. y cuando se trata de una vista de tabla, pase al encabezado UITableView en el método headerForRow.

Tienes que definir el tamaño de contenido de la vista de desplazamiento

Crea una salida a tu scrollview

 @IBOutlet weak var scrollview : UIScrollView! 

Haga que su altura sea igual a la sum de las alturas del encabezado, la tabBar y el contenedor:

 self.scrollView.contentSize = CGSizeMake(self.view.frame.width, header.frame.height + tabBar.frame.height + container.frame.height) 

Esto parece ser la continuación de otro problema que ha mencionado en otra pregunta .

Mirando la jerarquía del guión gráfico, sospecho que el problema es que no está cambiando la altura de la tab bar view cuando está cambiando el tamaño del contenido de la vista de desplazamiento y la altura de la vista de la colección. La vista de colección sigue visible, probablemente debido a que la tab bar view contenedor no clipToBounds=false contenidos ( clipToBounds=false ). Pero dado que la vista en sí no se extiende tan abajo, los toques no son reconocidos por la vista y son subvenciones.

Asegúrese de que la vista principal, la vista de contenido de la vista de desplazamiento (tamaño del contenido), la vista de la barra de tabs Y la vista de la colección se networkingimensionen correctamente. Dado que ha decidido no ir con la jerarquía de vista estándar (vista suplementaria o vista de encabezado), debe manejar la sobrecarga de administrar los límites de vista usted mismo.