2016-05-30 32 views
8

Sto usando uno UICollectionview con un layout circolare. Sto cercando di calcolare il contentOffset per articolo ma con il layout circolare il pieno contentsize non sembra corrispondere al contenuto.iOS: `UICollectionview`, come ottenere` contentoffset` di una cella con `indexPath`

  • contentSize totale del CollectionView = 780
  • Il contenuto di offset dell'ultimo elemento = 397 (?)
  • Il contenuto di offset per articolo = 33 (?)

non v'è alcun modo Posso ottenere l'offset di un articolo dal suo indexPath o almeno il valore corretto (397) dell'ultimo elemento nello collectionview? Ho ottenuto questi valori testando e stampando il contentoffset ma vorrei calcolare questi numeri (33 e 397) per codice senza dover scorrere.

Quindi c'è un modo per calcolare la cella contentoffset (?) All'interno del collectionview tramite il numero indexPath? Grazie!

+0

Forse si può ottenere cornice del cellulare e sapendo che calcola il suo contenuto compensato? UICollectionViewLayoutAttributes * attributes = [self.collectionView layoutAttributesForItemAtIndexPath: indexPath]; CGRect cellRect = attributes.frame; –

+0

ok, ho la x, y, la larghezza e l'altezza della mia cella..ma voglio l'offset del contenuto dell'elemento all'interno della mia vista uicollection. quale codice dovrei usare? –

+0

ContentOffset ti dice quanto scrollView è stato fatto scorrere in qualche direzione se scrollView's contentSize è maggiore di frame.size, altrimenti contentOffset è 0. Se vuoi tradurre questo in posizione di UICollectionViewCell, sarà qualcosa di simile: CGFloat offsetY = fabs (self.collectionView.contentOffset.y - cellLayoutAttributes.frame.origin.y); ma non so perché ne hai bisogno. Ad essere onesti, non sono sicuro che sia logico perché UICollectionViewCell non può avere contentOffset, ha frame e indexPath. –

risposta

2

Ho trovato il problema, il contentsize del scrollview è la dimensione del contenuto + la dimensione del frame . Questo è stato il motivo per cui lo contentSize ha restituito una dimensione maggiore rispetto al contenuto effettivo.

così: (contentSizeX - collectionviews frame X)/cells = contentOffset per item (780 - 383)/12 => 33