2015-07-01 14 views
8

Vorrei qualcosa di simile al seguente:Cambiare altezza UITableView singola cella

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("NewsCell", forIndexPath: indexPath) as! UITableViewCell 

    if indexPath == 3{ 

     cell.height = "50dp" 

    }  

    return cell 

} 

qual è l'alternativa o il modo più semplice per andare su questo?

EDIT

E 'possibile per me di specificare anche il numero di sezione: i.e-

if sectionIndex == 5 
+0

Leggi vista tabella riferimento protocollo delegato .. – Desdenova

risposta

14

suggerisco utilizzare la funzione heightForRowAtIndexPath. TableView chiamerà questa funzione per determinare l'altezza della riga per un percorso dell'indice specifico.

codice di esempio:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.section == SECTION_INDEX { 
     return 60 
    } else { 
     return UITableViewAutomaticDimension 
    } 
} 

Swift 4:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.section == SECTION_INDEX { 
     return 60 
    } else { 
     return UITableViewAutomaticDimension 
    } 
} 

Un po spiegare: indexPath ha due proprietà: sezione e riga. Controllando queste due proprietà, puoi creare il tuo flusso di controllo per determinare l'altezza per ogni cella.

Se si restituisce 60, significa che l'altezza della cella deve essere di 60 punti. Se restituisci UITableViewAutomaticDimension, vuoi che il sistema decida l'altezza migliore per te (in questo caso, è meglio impostare l'autolayout per la cella nello storyboard).

anche io suggerisco di prendere il corso CS193p Stanford su iTunes U, sarebbe di grande aiuto per voi :)

+0

In realtà ho trovato questo in linea ma non riuscivo a capire come usarlo in swift e specificare l'indice/sezione della cella. Potresti spiegarlo. Grazie per la risposta –

+1

@GregoryPeck vedi la mia risposta modificata. –

5

il modo più semplice è quello di ignorare heightForRowAtIndexPath

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    let section = indexPath.section 
    let row = indexPath.row 
    if section == 0 && row == 2{ 
     return 50.0 
    } 
    return 22.0 
    } 
+0

Perfetto grazie! –

4
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{ 
    if indexPath.section == 5 
    { 
     if indexPath.row == 3 
     { 
      return 150.0 
     } 
    } 

    return 200.0 
} 
Problemi correlati