He definido en mi Storyboard (iPad) una vista que contiene un UICollectionView, en la parte inferior de la vista también hay un UIToolbar.
En el UICollectionView he añadido un UICollectionViewCell (implementado por un iPadCellCollectionViewCell clase) que contiene un otro punto de vista que es un Núcleo de la Trama Gráfico (a CPTGraphHostingView clase).

Tengo una clase llamada X que implementa el UICollectionViewDelegate y UICollectionViewDataSource.

En la clase X, voy a construir para cada célula de mi punto de vista (en ViewDidLoad) el Núcleo de la Trama Gráfico y tengo el siguiente código para vincular la gráfica de la celda de la UICollectionViewCell

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId"; 

iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];

MyChart* chart = [_charts objectAtIndex:indexPath.row];

cell.hostingView.hostedGraph = chart.barChart;

return cell;

}

Funciona bien, todos los Gráficos se muestran correctamente en la pantalla. El problema ocurre cuando el usuario desplazarse por la vista, luego una o varias células se convierten en «blanco». Realmente no entiendo por qué.

He encontrado una solución, en lugar de añadir la CPTGraphHostingView en el UICollectionViewCell en el Interface Builder, voy a construir yo mismo y el código anterior se convierte en:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId"; 

iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];


[cell.contentView addSubview:[_hostingViews objectAtIndex:indexPath.row]];

return cell;

}

Con este código todo está funcionando bien. Es allí cualquier explicaciones de por qué no funciona cuando estoy añadiendo la CPTGraphHostingView en el UICollectionViewCell con el IB?

Es una cuestión de llamar «addSubview» cada vez que se llama al método? No hay pérdidas de memoria?

OriginalEl autor sebastien | 2012-11-19

2 Comentarios

  1. 3

    Esto parece ser un error en UICollectionView cuando se utiliza sectionInsets.
    Las células no obtienen invisibles, que están fuera de lugar fuera de los límites, a veces, en desplazamiento rápido.

    Así que si usted normalmente tiene 3 elementos por fila, obtendrá un cuarto elemento en una fila, pero no hay ningún elemento en el primer lugar de la fila siguiente.

    Si tu UICollectionView no clip a los límites, y se mueven en la parte superior de la interfaz de usuario,
    usted puede ver esta desalineada de la célula.

    Mi solución fue tan lejos como para no usar sectionInsets, y la rodean por el uso de contentInset y algún espacio vacío en los encabezados de sección.

    También encontré algunos de los otros chicos en Twitter con el mismo problema.
    También hay un informe de error: 12353513

    Donde puedo ver que informe de errores?

    OriginalEl autor Thyraz

  2. 9

    He tenido un problema similar. Me fijo, obligando a volver a dibujar cuando setFrame: se llama en mi contenido personalizado. En su caso, de la subclase de CPTGraphHostingView y reemplazar este método:

    -(void)setFrame:(CGRect)frame {
        [super setFrame:frame];
        [self setNeedsDisplay]; //force drawRect:
    }

    Edición: Una manera más fácil de actualizar celular vistas cuando se reutilizan es reemplazar applyLayoutAttributes: en iPadCellCollectionViewCell de la siguiente manera:

    -(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
        //apply custom attributes...
        [self.hostingView setNeedsDisplay]; //force drawRect:
    }

    Con respecto a su solución: habrá más y más subvistas en la vista de contenido, que probablemente no es una buena cosa. Sin embargo, si desea eliminar cualquier edad subvista antes de añadir uno nuevo, que se debe ACEPTAR, demasiado.

    Tengo el mismo problema con las células de representación en el lugar equivocado cuando se desplaza horizontalmente, pero, por desgracia, ninguna de estas dos revisiones que trabajó para mí.
    Gran, trató de ambos enfoques y tanto trabajó.
    gracias segunda opción trabajado para mí

    OriginalEl autor chris

Dejar respuesta

Please enter your comment!
Please enter your name here