2014-12-07 10 views
7

Sto progettando l'interfaccia utente di un'applicazione ios 8 in fase di creazione in swift. Ho una conoscenza intermedia di autolayout e vincoli. Ecco la mia situazione: ho un controller di visualizzazione collezione personalizzato e una cella di visualizzazione collezione. Voglio usare i vincoli "uguale larghezza" e "altezza uguale" all'interno del generatore di interfacce per impostare la larghezza e l'altezza di una cella rispetto a un moltiplicatore della vista genitore - invece di usare proprietà di altezza/larghezza intrinseche come 320 x 94.Le migliori pratiche per l'impostazione dei vincoli di larghezza e altezza di autolayout per una cella di visualizzazione della raccolta?

Ecco cosa ho provato

  1. con larghezza e altezza intrinseca per le classi all'interno IB. (Questo non funziona)
  2. Control-trascina da un UICollectionViewCell alla CollectionView (non ha funzionato visto che "altezze uguali" e "larghezze uguali" non sono nemmeno opzioni di vincolo)

devo solo accontentarsi dell'altezza e della larghezza intrinseche e assumere che CollectionViewFlowLayout si prenderà cura di me o c'è un modo per farlo in modo programmatico?

Grazie. Alex

+0

Nessuno cuciture di conoscere la risposta a questa. È molto fastidioso creare viste di raccolta e non è possibile guardare l'anteprima di ciò che si sta modificando. –

risposta

-1

Utilizzare i UICollectionViewDelegateFlowLayout metodi per affinare la dimensione della cella

per esempio se si desidera 3 celle per tutta la larghezza vista

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
{ 
    let width = CGRectGetWidth(collectionView.bounds) 
    let hcount = 3 
    let gapcount = CGFloat(hcount) + 1 
    //this should be a class var/constant which you can feed into the minimumLineSpacingForSectionAtIndex delegate 
    let gap = 10 
    let kwidth = width - gap 
    let keywidth = kwidth/CGFloat(hcount) 

    return CGSize(width:keywidth,height:50) 
} 

È possibile ottimizzare la distanza tra le celle con

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat

e gli spigoli con

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets

0

layout e le dimensioni delle cellule è fatto dal collectionViewLayout proprietà di CollectionView. Utilizzando un collectionViewLayout di classe UICollectionViewFlowLayout, è possibile impostare dimensione fissa utilizzando la proprietà formato dell'articolo:

(collectionView.collectionViewLayout as? UICollectionViewFlowLayout)?.itemSize = 100 //set fixed size here 

o impostare dimensioni variabili con metodo delegato:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    // determine variable size here using indexPath value 
}