Me ajustar la altura para cada UITableViewCell en

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

Necesito para obtener cada una de las UITableViewCell la altura en

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

porque necesito addSubView en diferentes células.

He intentado utilizar cell.frame & cell.bounds & cell.contentView.frame, pero la altura no ha cambiado.

puede utilizar una variable global y el uso de la misma variable en heightForRowAtIndexPath función, así como cellForRowAtIndexPath función
de la célula.límites.tamaño.la altura le dará la altura.han tratado de esta manera ?
He tratado de celda.límites.tamaño.la altura,que no trabajo.Como la primera respuesta, dijo, son de diferentes materias.
no.. el punto es que la célula del marco no es final hasta que/a la derecha antes de que esté en la pantalla. ver mi respuesta de la manera correcta

OriginalEl autor satgi | 2012-12-20

5 Comentarios

  1. 7

    Esto puede ser demasiado tarde, pero se puede utilizar el método delegado:

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        CGRect cellSize = cell.frame;
    }

    Espero que ayude a alguien, que me haga saber si me he perdido algo. 🙂

    OriginalEl autor ᴳᴿᴵᴹᴹ

  2. 2

    He resuelto de esta manera:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        //create object
        id myObj = [_arrayEvents objectAtIndex:indexPath.row];
    
        //create static identifier
        static NSString * myIdentifier = @"Cell";
    
        //create static UITableViewCell
        static UITableViewCell * cell;
    
        //create cell with object
        cell = [self buildCell:myIdentifier tableView:tableView obj: myObj];
    
        return cell.contentView.frame.size.height;
    
    }
    Usted no tiene una garantía de que el contenido ha sido de diseño y por lo tanto, tiene el tamaño adecuado…

    OriginalEl autor Wagner Sales

  3. 1

    Son diferentes materias. En heightForRowAtIndexPath: informar a la UITableView cuánto espacio vertical debe utilizar para mostrar la celda correspondiente, pero esto no afecta el tamaño real de la celda! Así que si quieres para que coincidan con el que usted tiene que configurar manualmente las dimensiones.

    Si no quieren /necesitan para cambiar el tamaño de la celda marco debe almacenar sólo la altura en una propiedad de su costumbre clase de células.

    Gracias, esto ayuda mucho! Es bueno saber por qué.
    por defecto, el cellFrame se establece la altura a la que volver… !? Si nunca cambia el tamaño de una celda marco manualmente
    tal vez no entiendo tu comentario, pero la célula marco no es juego! usted puede fácilmente verificar esta en la depuración… en realidad he utilizado este comportamiento, para lograr algunos efectos agradables en tableviews: imagina una tabla transparente con cellheight más grande que cellsize.
    que hacer, lo siento por la mala inglés allí! Ill intentar ahora…. sería noticia para mí, sin embargo .
    – (void)layoutSubviews { [super layoutSubviews]; NSLog(@»%@», NSStringFromCGRect(auto.frame)); } => las células marco cambia de tamaño para llenar la altura dada, así que yo no lo entiendo…

    OriginalEl autor il Malvagio Dottor Prosciutto

  4. 1

    Lo que acerca de UITableViews método, - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath.

    Obtener el rect como este,

    CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];

    OriginalEl autor Hemang

  5. -1

    Como @ilMalvagioDottorProsci dice,El valor devuelto por la heightForRowAtIndexPath función no afectan el tamaño real de la celda.

    Si quieres lograr que cada fila de la altura está determinada por la altura de la celda.Tengo un truco.

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        id aKey = [self buildCellCacheKey:indexPath];
        UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    
        if ([_cellCache objectForKey:aKey]==nil) {
            [_cellCache setObject:cell forKey:aKey];
        }
    
        return cell.bounds.size.height;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //for flexible height of table view cell.in this way,the cell height won't be caculate twice.
        id aKey = [self buildCellCacheKey:indexPath];
        UITableViewCell *cacheCell = [_cellCache objectForKey:aKey];
        if (cacheCell) {
            [cacheCell retain];
            [_cellCache removeObjectForKey:aKey];
            LOGDebug(@"return cache cell [%d]",indexPath.row);
            return [cacheCell autorelease];
        }
    
    //here is the code you can config your cell..  
    }
    esto funciona y para tablas simples, con sólo un par de elementos es genial, pero es muy malo para tablas más grandes como yo lo veo. cada célula se crea una instancia sólo porque su altura es solicitado -> a) un montón de puntos de vista están hechas y b) que «desactivar» la célula de la reutilización.
    Oh,ya veo….estás en lo correcto.Yo uso este truco en mi código.¿Tiene alguna sugerencia de cómo debería solucionar este [email protected]
    De verdad que me vaya con lo que me sugiere…. reemplazar layoutSubviews de celular si usted necesita para trabajar con los marcos y límites. .. que también promueve SOC por el movimiento de publicación código lejos de la viewController y en la célula
    Me refiero a que Si quiero que la heightForRowAtIndexPath función devuelve el valor es el mismo que la altura de la celda y quiero escribir calcular el código en la celda .m archivo,no el cálculo en el formato tableview delegado y la memoria caché.
    lo que yo siempre hago es tener un método estático [MyCellClass calculatedHeightForCellValue:(id)theModelObjectToBeDisplayed]; => no crear cualquier punto de vista o por lo que sólo hace el cálculo de lo grande que la celda debe convertirse en

    OriginalEl autor Ji Hu

Dejar respuesta

Please enter your comment!
Please enter your name here