2015-12-09 7 views
9

Ho un diverso examples in cui è possibile aggiornare l'altezza UITableViewCell in base all'aumento di UITextView che in realtà funziona per me. Il problema che sto affrontando è che ho più sottoview sotto UITextView all'interno di un UITableViewCell. In questo modo, l'altezza della cella si aggiorna, ma la posizione delle sottoview rimane fissa, il che provoca la sovrapposizione di UITextView e delle visualizzazioni secondarie. Solo per menzionare, non sto usando il layout automatico.
Come posso risolvere questo problema?
Questi sono i tre screenshot che vi aiuterà a capire il mio problema:Come aggiornare l'altezza di UITableViewCell a causa del testo inserito in UITextView

1. Prima TextView è indicato:

enter image description here

2. Dopo TextView è indicato:

enter image description here

3. Dopo che il testo viene inserito:

enter image description here

+0

Nella tua cella tableview metti tutta la sottoview (che rimane fissa) in una vista e quando la tua altezza UITextview cambia (aumenta/diminuisci) imposta quella vista y sotto UITextview. –

+0

Che lingua stai usando? –

risposta

2

Si sta utilizzando il layout automatico? Ho fatto questo prima diverse volte con UITableViewCells anche se è stato principalmente con UILabel e non con UITextView.

Il problema potrebbe essere risolto con il layout automatico. Si impaginano tutte le proprie sottoview (all'interno di UITableViewCell) l'una rispetto all'altra. Se una vista (ad esempio UITextView) cambia dimensione, le altre visualizzazioni verranno quindi regolate rispetto a quella vista. Ecco alcuni link utili.

Questo non è specifico di UITableViewCell ma ha molti buoni esempi di vari scenari. Stanford University iOS in via di sviluppo 7 applicazioni: Lecture 9 - Animazione e Autolayout https://www.youtube.com/watch?v=r1sc7NI6-wo

+0

Non sto usando il layout automatico. E se lo cambio ora, sarà un enorme cambiamento. – Nitish

+0

Capisco che alcuni punti di vista potrebbero essere troppo difficili da passare al rollover automatico. Tieni presente che puoi utilizzare molle e montanti insieme al ciclo automatico. Non deve essere rigorosamente uno o l'altro. Puoi anche provare a implementare un UIView personalizzato (.xib) che esegue l'autolout ma che è un bambino per una vista che utilizza molle e montanti per isolare il modo in cui esegui il layout. – xdeleon

+0

Sto creando visualizzazioni secondarie di UITableViewCell dal codice in cellForRowAtIndex e non tramite xib. – Nitish

3

Sto assumendo che si sta utilizzando il layout automatico per questa cella (ma potremmo usare un esempio di codice o di Xcode screenshot per aiutarvi a più specifico). Se si utilizza il layout automatico, si vuole fare in modo che:

  1. Hai un vincolo tra l'UITextView e gli altri subviews UIView sotto di esso nella cella
  2. Gli altri subviews UIView sono infine costretti a il fondo della cella.
+0

Non sto usando il layout automatico. E se lo cambio ora, sarà un enorme cambiamento. – Nitish

+0

Aggiunto screenshot. – Nitish

+0

È necessario utilizzare i layout automatici per regolare lo spazio. –

3

Perché UITableViewCell s vengono riutilizzati, troverete che quando si aggiungono oggetti al contentView, tali oggetti saranno riutilizzati senza essere rimossa, portando a subviews sovrapposti. Il modo per aggirare questo è per iniziare la vostra cellForRowAtIndexPath con il seguente codice:

static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    for (UIView * view in [cell.contentView subviews]) { 
//  clears the cell before reusing 
     [view removeFromSuperview]; 
    } 

Spero che questo aiuti.

Problemi correlati