/ / Perché UIImageView non riempie l'intero CollectionViewCell anche se ho tutti i vincoli: ios, swift, uiimageview, autolayout, uicollectionview

Perché UIImageView non riempie l'intero CollectionViewCell anche se ho tutti i vincoli: ios, swift, uiimageview, autolayout, uicollectionview

Ho un orizzontale UICollectionViewe ogni cella contiene a UIImageView. Quando posiziono UIImageView all'interno della cella:

lo storyboard ha questo aspetto(notare il UIImageView prende l'intero spazio del UICollectionViewCell con un identificatore postInnerCell)inserisci la descrizione dell'immagine qui

Penso di aver impostato il vincolo usando autoLayout correttamente, con ogni lato del UIImageView si struggeva ai margini del UICollectionViewCell. Come questo:

inserisci la descrizione dell'immagine qui

Quando ho eseguito il simulatore, tuttavia, sembra che questo:inserisci la descrizione dell'immagine qui

L'immagine non riempie l'intero spazio del collectionViewCell(con il colore di sfondo grigio). La modalità di contenuto del UIImageView è impostato per essere riempire l'aspetto nel generatore di interfacce.

Ecco la mia gerarchia di vista: inserisci la descrizione dell'immagine qui

** Nota che l'intero UICollectionView è una cella di tableView (in sostanza, quello che provoper realizzare ogni riga della tabellaView è un cursore orizzontale). Non sono sicuro che sia il problema. Qualcuno ha qualche idea sul perché si verifichi un simile problema. **

risposte:

1 per risposta № 1

Si scopre che ho bisogno di ri-layout della sottoview chiamando cell.layoutIfNeeded() prima di restituire la cella nel collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) metodo. Grazie al contributo di risposta qui UICollectionViewCell contenuto di dimensioni errate al primo carico


0 per risposta № 2

Impostato Content hugging priority della visualizzazione dell'immagine a Low (250).


0 per risposta № 3

IIRC, la vista del contenuto della cella verrà ridimensionata senza attivare AutoLayout, quindi è necessario attivare manualmente un passaggio di layout (ad es. .needsLayout = true o aggiungere vincoli dalla visualizzazione del contenuto alla cella