2014-11-28 11 views
10

UITableViewWrapperView la dimensione non cambia in base al contenuto se l'altezza della riga è UITableViewAutomaticDimension.La dimensione di UITableViewWrapperView non cambia in base al contenuto se l'altezza della riga è UITableViewAutomaticDimension

Sto tentando di creare un elenco di feed con TableView e righe di altezza dinamica. TableView è scorrevole ma UITableViewWrapperView sembra che non stia cambiando le sue dimensioni!

Di seguito è riportato il codice e lo screenshot della gerarchia di viste.

Penso che sia strano.

Codice:

class FeedController: UITableViewController { 

    var items: NSMutableArray = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     refreshControl?.addTarget(self, action: "feedLoad", forControlEvents: UIControlEvents.ValueChanged) 

     self.feedLoad() 

    } 

    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 120.0 
    } 

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     println("called") 
     return UITableViewAutomaticDimension 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.items.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     return self.getCellForItemAtIndexPath(indexPath) 
    } 

    func getCellForItemAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell { 

     let item: Dictionary = self.items[indexPath.row] as Dictionary<String, AnyObject> 

     let cell = tableView.dequeueReusableCellWithIdentifier((item["type"] as String) + "Cell", forIndexPath: indexPath) as FeedViewCell 

     cell.fillData(item) 

     return cell as UITableViewCell 
    } 

    func feedLoaded(){ 

     tableView.reloadData() 

    } 

    func feedLoad(){ 
     // Feed Load Logic which will call next line once feed loaded 

     self.feedLoaded() 
    } 

} 

View Hierarchy

+0

Sto avendo lo stesso problema e ancora non riesco a trovare una risposta ad esso. – Kex

+0

Quali sono i tuoi vincoli? – jszumski

+1

ha lo stesso problema, l'hai risolto? –

risposta

0

Io parto dal presupposto di avere layout automatico configurato per il tuo cellulare, in quanto questo è l'unico modo per ottenere questo lavoro. Il layout automatico dovrebbe essere in grado di calcolare l'altezza in base ai vincoli della cella.

Quindi si dovrebbero avere vincoli tra le viste in verticale e tra le viste sui bordi superiore e inferiore della vista super (in questo caso la vista cella).

Supponiamo di avere una cella con titolo e una descrizione, in questo modo:

|------------------| 
| Title   | 
|     | 
| Description with | 
| long multiple | 
| lines of text | 
|------------------| 

In questo esempio è necessario impostare aggiungere un vincolo con uno spazio verticale tra title e description, un vincolo di spazio verticale tra il title e la parte superiore della cella e uno spazio verticale tra il fondo di description e il fondo della cella.

0

La documentazione di estimatedHeightForRowAtIndexPath() indica che il valore ripristinato da tale chiamata è il valore di segnaposto per tutti fino a quando si verifica un evento di scorrimento. Sto indovinando che quando si verifica anche lo scroll, viene chiamato heightForRowAtIndexPath. Quindi:

  1. Modificare il valore per l'altezza stimato e vedere se questo è il fisso altezza che si osserva.
  2. Viene richiamato heightForRow quando si scorre? In caso contrario, potrebbero esserci altri problemi relativi allo scorrimento, ad esempio contentSize, ecc., Che devono essere affrontati in modo tale che lo scorrimento avvenga.
Problemi correlati