2015-02-07 2 views
5

Realizzo celle personalizzate con 2 etichette multilinea e pin queste etichette su tutti i lati. Quando in -tableView:heightForRowAtIndexPath: per iOS> = 8 restituisco UITableViewAutomaticDimension. Ma quando appare la vista tabella l'altezza della cella è più grande di quanto dovrebbe essere. Dopo aver scorrere verso il basso e quindi scorrere verso l'alto, la cella assume l'altezza normale. Come risolvere questo comportamento?Altezza UITableViewCell errata con UITableViewAutomaticDimension

Codice in altezza:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
     return UITableViewAutomaticDimension; 
    } 

    static CCTopicTableViewCell *cell; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     cell = [tableView dequeueReusableCellWithIdentifier:@"topicCellIdentifier"]; 
    }); 
    cell.topic = [self.topics topicAtIndexPath:indexPath]; 

    cell.bounds = CGRectMake(0, 0, CGRectGetWidth(self.tableView.bounds), CGRectGetHeight(cell.bounds)); 

    [cell setNeedsLayout]; 
    [cell layoutIfNeeded]; 

    CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size.height + 1; 
} 

E il risultato:

Dopo lo scorrimento:

risposta

9

Il problema è scomparso quando io non impostato TableView's stimatoRowHeight per iOS 8 e aggiornare preferredMaxLayoutWidth ogni volta che imposta il testo per etichette multilinea

+0

Grazie, questo ha risolto il problema. Non sono sicuro di aver capito perché lo risolve, ma sono sicuro che dopo aver approfondito l'argomento verrà da me. Grazie ancora! –

+0

Qualche idea per quale motivo? –

1

Automatic dimension non funziona bene per alcuni UILabel se tale etichetta è allineata con etichetta diversa da bordi superiori o bordi inferiori. Assicurati solo di non avere questi allineamenti.

2

Ho risolto questo problema impostando "testo" di proprietà delle etichette più righe a "zero":

override func prepareForReuse() { 
    _label.text = nil 
} 

anche properies tavolo "estimatedRowHeight" e "rowHeight" dovrebbe essere impostato correttamente :

_tableView.estimatedRowHeight = 44 
_tableView.rowHeight = UITableViewAutomaticDimension 
+0

Ottimo! Funzionato perfettamente (iOS9) – Chris