2012-01-13 7 views
5

Ho tre UILabel personalizzate in UITableViewCell. Il disegno cellule simili,Modifica l'altezza di UITableviewCell in modo dinamico in iPhone?

Date(12.1.2012) Time(12.00pm) 
Cost: $20.00 
Details 

ho specificato l'altezza di riga 100 in - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;. Ma ora i dettagli alcune volte ritornano vuoti (Null) dal server. In quel momento ho bisogno di rimuovere l'etichetta Dettagli dalla cella e modificare la particolare altezza della cella (riga) a 70. Come posso fare questo? Ho cercato il mio livello migliore in Google. Ma, ho ancora solo confuso per fare questo. Potete per favore aiutarmi? Grazie. Ho avuto qualche idea da questo link - http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/. Hanno usato solo un'etichetta per ridimensionare l'altezza della riga. Mi aiuti per favore.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 90; 
} 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        static NSString *CellIdentifier = @"Cell"; 

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
        if (cell == nil) 
        { 
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 


            UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)]; 
            dateLabel.tag = 100; 
            dateLabel.backgroundColor = [UIColor clearColor]; 
            dateLabel.font = [UIFont fontWithName:@"Helvetica" size:16]; 
            dateLabel.font = [UIFont boldSystemFontOfSize:16]; 
            dateLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: dateLabel]; 

      UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(120, 0, 200, 25)]; 
            timeLabel.tag = 101; 
            timeLabel.backgroundColor = [UIColor clearColor]; 
            timeLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            timeLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: timeLabel]; 

      UILabel *costLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 25)]; 
            costLabel.tag = 102; 
            costLabel.backgroundColor = [UIColor clearColor]; 
            costLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            costLabel.font = [UIFont boldSystemFontOfSize:14]; 
            costLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: costLabel]; 

            UILabel *eventLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 300, 25)]; 
            eventLabel.tag = 103; 
            eventLabel.backgroundColor = [UIColor clearColor]; 
            eventLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            eventLabel.font = [UIFont boldSystemFontOfSize:14]; 
            eventLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: eventLabel]; 
     } 

        UILabel *dateLabel = (UILabel *) [cell.contentView viewWithTag:100]; 
        dateLabel.text = [DateArray objectAtIndex:indexPath.row]; 

     UILabel * timeLabel = (UILabel *) [cell.contentView viewWithTag:101]; 
        timeLabel.text = [timeArray objectAtIndex:indexPath.row]; 

     UILabel * costLabel = (UILabel *) [cell.contentView viewWithTag:102]; 
        costLabel.text = [costArray objectAtIndex:indexPath.row]; 

        UILabel *eventLabel = (UILabel *) [cell.contentView viewWithTag:103]; 
     NSString *description = [eventArray objectAtIndex:indexPath.row]; 
     if([description isEqualToString:@""]) 
     { 
     eventLabel.text = @""; // Here i don't want to show this label and resize(reduce) the row height to 60; 
     } 
     else 
     { 
        eventLabel.text = description; 
     } 
        return cell; 
    } 

Come posso fare questo? Grazie.

risposta

8

Mentre si restituisce l'altezza, controllare se la descrizione del dettaglio è vuota. Se si tratta di tornare 60.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSString *description = [eventArray objectAtIndex:indexPath.row]; 
if([description isEqualToString:@""]) 
    return 60 
else 
{ 
    return 90; 
} 
} 

Inoltre, è necessario rimuovere l'etichetta con @"Details" nella stessa if in cellForRowAtIndexPath:. Taggalo in anticipo, identificalo dalle sottoview e rimuovilo dalla cella.

+0

Mr.MadhavanRP ringrazia per la risposta. Ho provato la tua risposta nel mio codice. Ho controllato la condizione in cellForRowAtIndexPath: anche. La prima volta funziona bene. Quando scorro la vista tabella, la dimensione della cella è cambiata e l'etichetta descrittiva ha cambiato la posizione. Significa che l'etichetta descrittiva è rimossa per tutte le righe. Potete per favore aiutarmi. grazie – Gopinath

+0

@Gopinath perché non provi ad aggiungere l'etichetta dei dettagli come sottoview delle celle solo quando hai qualche descrizione. Potrebbe essere necessario creare una classe personalizzata per risolvere il problema di scorrimento. fare riferimento alla risposta di questa domanda http://stackoverflow.com/questions/8352530/changing-the-position-of-custom-uibutton-in-custom-uitableviewcell – MadhavanRP

0

È possibile controllare le dimensioni della stringa di ritorno utilizzando CGSize come questo -

CGSize size = [detailStr sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(190, 40) lineBreakMode:UILineBreakModeWordWrap]; 

è possibile modificare la larghezza, l'altezza e tipo di carattere in base alle proprie condizioni. Si prega inoltre di verificare se detailStr non è uguale a zero prima di calcolare le dimensioni.

+0

Mr.Sasdnib, grazie per la risposta. Ho modificato la mia domanda. Per favore controlla questo. Ho semplicemente confuso la tua risposta, puoi aiutarmi per favore. Grazie. – Gopinath

Problemi correlati