2013-04-10 16 views
8

Ho una tabella con celle statiche. Per una cella voglio cambiare la sua altezza in base all'altezza dell'etichetta (all'interno di quella cella) e allo stesso tempo lasciare intatte tutte le altre celle. Come posso ottenere l'altezza della cella corrente? O forse c'è un approccio migliore?Altezza della cella corrente all'interno di heightForRowAtIndexPath?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([indexPath section] == 2) { 
     return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
    } else { 
     return ...; // what should go here, so the cell doesn't change its height? 
    } 
} 
+3

tua cella va là. 44 se non hai cambiato nulla. – Desdenova

+0

È inoltre possibile calcolare l'altezza necessaria effettiva della cella per l'etichetta utilizzando l'estensione di UIKIt al metodo NSString 'sizeWithFont:'. –

risposta

12

È possibile chiamare:

[super tableView:tableView heightForRowAtIndexPath:indexPath] 

nel blocco gli altri in modo che non ci si deve preoccupare se mai è stata modificata l'altezza di default.

4

È possibile ottenere/impostare l'altezza di default tableView.rowHeight, oppure è possibile memorizzare l'altezza prima di cambiare altezza della cella, in modo da poter ottenere l'altezza di default da qualche variabile;

1

Si prega di fare questo

if ([indexPath section] == 2) 
{ 
    if(indexPath.row == 1) 
     return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
    else 
     tableView.rowHeight 
} 
0

È, forse, vuole calcolare l'altezza delle etichette di larghezza vincolata. In questo caso è possibile creare il metodo del genere:

- (CGFloat)textHeightOfMyLabelText { 
    CGFloat textHeight = [self.myLabel.text sizeWithFont:self.myLabel.font constrainedToSize:LABEL_MAX_SIZE lineBreakMode:self.myLabel.lineBreakMode].height; 
    return textHeight; 
} 

e risultato utilizzare in - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath. Non dimenticare di aggiungere il valore marginale della tua etichetta.

+0

Sì, thx, lo cambierò =) – Ossir

0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == youSectionNumber) 
    { 
     if (indexPath.row == numberOfrow) 
     { 
      return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
     } 
    } 

     return 44; // it is default height of cell; 
} 
1

@talnicolas grande risposta, ecco per Swift 3: altezza di default

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.section == 2 { 
     let easy = self.myLabel.frame 
     return easy.origin.y *2 + easy.size.height 
    } else { 
     return super.tableView(tableView, heightForRowAt: indexPath) 
    } 
} 
Problemi correlati