Il layout automatico viene ignorato in UITableViewCell personalizzato


92

Nonostante abbia impostato vincoli a tutti gli elementi, inclusi quelli verticali necessari alla cella per calcolare la sua altezza, l'auto-layout sembra essere ignorato: tutte le celle sono compresse.

Ecco uno screenshot del risultato e dei vincoli nello storyboard. inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Nel VC che contiene il tableView, ecco il codice in viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Commentando la seconda riga si ottengono celle con un'altezza di 120.0 ma anche il layout automatico viene ignorato.

Grazie


Aggiornare

Per semplificare l'interfaccia, ho lasciato una singola etichetta con, come vincoli:

  • Leading space to superview
  • Spazio al top per superview
  • Larghezza e altezza fisse (100 e 100)
  • Spazio inferiore al margine del contenitore per assicurarsi che la cella abbia tutti i vincoli verticali per determinarne l'altezza

E con questa interfaccia semplificata, il layout automatico non viene ancora preso in considerazione, il che mi suggerisce che il problema non proveniva da vincoli impostati male.

In Impostazioni dimensioni, l'altezza della riga è impostata su 120 e Personalizzato è selezionato. La cella ha la classe personalizzata corretta, l'identificatore di riutilizzo della cella è corretto.


Aggiornamento: soluzione trovata

Questo è stato un semplice errore, vedi la mia risposta di seguito.


Controlla il tuo terminale di debug: ci sono log NSLayoutConstraint che suggeriscono che qualcosa non funziona come previsto?
Matthew Hallatt

Non appare nulla nel terminale di debug @MatthewHallatt, grazie.
Kqtr

@Kqtr prova a commentare queste due righe e poi eseguilo normalmente una volta per verificare che ci siano modifiche?
Tushar Sharma

@TusharSharma Commentare le due righe ha lo stesso effetto del commentare solo la riga rowHeight: la cella ha un'altezza di 120.0, ma il layout automatico non funziona.
Kqtr

1
Il generatore di interfacce mostra eventuali vincoli come mancanti o ambigui? Verifica la presenza del piccolo punto esclamativo giallo o rosso.
Matthew Hallatt

Risposte:


249

Il layout automatico è stato ignorato perché sia ​​alla cella prototipo CHE alla UIView della cella era stata assegnata la classe di cella personalizzata in IB.

L'impostazione di UIView sulla classe UIView ha risolto il problema.

solo per essere più chiari


2
Sono rimasto bloccato in questo problema per ore e questo lo risolve, grazie!
candidev

Ho sprecato quasi tutta la giornata finché non sono arrivato qui .... Mille grazie a te.
Rinascita il

-3

Penso che il problema sia che stai implementando:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

È necessario rimuovere questa funzione in modo che la tableview calcoli la sua altezza automatica per le celle.


Grazie, purtroppo non lo sovrascrivo: in realtà non ho nemmeno un delegato per questo tableView, solo una fonte di dati.
Kqtr

Hai impostato i vincoli per la visualizzazione del testo su tutti i bordi della cella? E hai disabilitato lo scorrimento di textView?
Jaafar Barek

L'etichetta multilinea (0 linee) ha vincoli per 1) spaziatura verticale con il numero alla sua sinistra 2) spazio in alto a superview 3) spazio in coda a superview e 4) spazio in basso con l'etichetta Asked By.
Kqtr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.