2012-11-17 13 views
9

Considerare uno UICollectionView con layout di flusso e paging abilitato (impostando pagingEnabled a YES).Numero di pagine di UICollectionView con paging in iOS

Quale sarebbe il modo più semplice per ottenere il numero totale di pagine?

E dove sarebbe il posto più appropriato per aggiornare il numero totale di pagine (dato che potrebbe cambiare se gli articoli vengono aggiunti/cancellati, le dimensioni della vista raccolta cambiano o il layout cambia)?

risposta

6

Se i UICollectionView scorre orizzontalmente, si dividono sua 'larghezza s alla larghezza del suo telaio:

int pages = floor(self.collectionView.contentSize.width/ 
        self.collectionView.frame.size.width) + 1; 

Se scorre verticalmente, si dividono sua contentSize' contentSize altezza all'altezza del suo telaio s:

int pages = floor(self.collectionView.contentSize.height/ 
        self.collectionView.frame.size.height) + 1; 
+4

Ciò presuppone che non c'è distanza, e che tutti gli elementi hanno la stessa larghezza o altezza. – hpique

+2

Non potresti usare 'ceil' invece di ottenere' floor' e aggiungere 1? – swilliams

+4

Non userebbe 'ceil' essere * more * accurato, poiché se' content.width' e 'frame.size.width' sono uguali, si finisce con' 2', quando c'è tecnicamente solo una pagina? –

5

la risposta giusta dovrebbe essere:

Se l'UICol rotoli lectionView orizzontalmente:

int pages = ceil(self.collectionView.contentSize.width/ 
        self.collectionView.frame.size.width); 

invece scorre verticalmente:

int pages = ceil(self.collectionView.contentSize.height/ 
        self.collectionView.frame.size.height); 

seguito a wiki:

In matematica e informatica, pavimento e funzioni soffitto mappa un numero reale al più grande precedente o al più piccolo successivo numero intero , rispettivamente. Più precisamente, floor (x) è il più grande intero non maggiore di x e ceiling (x) è il più piccolo intero non minore di x.

Ecco il mio risultato a controllare:

ceil(2.0/5.0) = 1.000000 
ceil(5.0/5.0) = 1.000000 
ceil(6.0/5.0) = 2.000000 
ceil(10.0/5.0) = 2.000000 
ceil(11.0/5.0) = 3.000000 
Problemi correlati