Vorrei sfruttare l'altezza dinamica UITableViewCell
in iOS 8. Devo inserire uno UICollectionView
all'interno di uno UITableViewCell
. Voglio assicurarmi che tutte le celle nella vista della raccolta siano visibili sullo schermo, quindi la cella della tabella dovrebbe aumentare di altezza per adattarsi alla vista della collezione. Ho quasi funzionato. Non sono stato in grado di ottenere che la cella della tabella abbia le dimensioni corrette: è troppo lunga o troppo corta e alcuni problemi di layout sono visibili finché non interagisco con la tabella (più su quello sotto).Aggiornare l'altezza della vista di raccolta per adattarsi a tutte le celle all'interno di una cella di visualizzazione tabella utilizzando Auto Layout
Ho impostato i vincoli di layout automatico per la vista di raccolta su contentView
della cella della tabella: iniziale, finale, superiore e inferiore. Ho quindi creato un vincolo di altezza sulla vista di raccolta in modo da poter aggiornare immediatamente il suo constant
dopo aver calcolato l'altezza appropriata per adattarsi a tutte le celle nella vista di raccolta (perché non penso che ci sia un modo per farlo automaticamente).
Ecco il resto del setup.
viewDidLoad {
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 44
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let cellDimension = self.collectionView.frame.size.width/7 //always 7 columns
let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
flowLayout.itemSize = CGSizeMake(cellDimension, cellDimension)
self.collectionViewHeightConstraint.constant = cellDimension * 4 //always 4 rows
}
non ho implementato heightForRowAtIndexPath
.
Questa configurazione comporta vincoli verticali in conflitto. Ho provato a ridurre la priorità dei vincoli e a modificare la relazione in un gruppo di combinazioni, ma nessuna ha comportato il comportamento desiderato. Se riduco la priorità del vincolo di altezza a 999, la cella di visualizzazione tabella è troppo alta all'inizio, ma dopo aver fatto scorrere verso l'alto e verso il basso la tabella visualizza gli aggiornamenti dell'altezza della cella della tabella all'altezza prevista. Con alcune altre combinazioni, il risultato è che la cella di una tabella è troppo corta ma la vista di raccolta completa è dissanguata, la cella della tabella è troppo corta e la vista di raccolta è troncata o la cella della tabella è troppo alta, in base a quale priorità e relazioni che ho applicato ai vincoli. Inoltre, le celle di visualizzazione della raccolta non vengono visualizzate con le dimensioni appropriate mentre la vista è in animazione (ma vengono corrette correttamente dopo la fine dell'animazione), oppure se ricarico la tabella le celle della vista di raccolta sono di dimensioni errate finché non scorrono la tavola.
Come posso risolvere questi problemi di aspetto per ottenere un'altezza di cella di visualizzazione tabella dinamica che contiene una vista di raccolta completamente visibile con dimensioni di cella dinamiche in base alla larghezza dello schermo?
Vorrei suggerire di spostare l'impostazione rowHeight "self.tableView.rowHeight =" da ViewDidLoad a ViewWillAppear, potreste voler controllare anche questa domanda. [link] (http://stackoverflow.com/questions/29263875/uitableviewcells-initial-load-view-display-issue) –
@KevinHorgan Questo non ha fatto nessuna differenza evidente. – Joey
Per fare in modo che l'autolayout funzioni correttamente in UITableViewCell è necessario aggiungere i vincoli per tutti i layout in containerView senza mancare. Altrimenti, gli autolayout non funzioneranno correttamente. Controllare il seguente collegamento che fornisce alcune informazioni dettagliate sull'installazione di autolayout per tableviewcell http: // stackoverflow .com/questions/29231390/uitableview-strange-layout-behavior-changes-on-scroll/29327082 # 29327082 – Ram