2012-11-27 9 views
7

Wprowadzam widok zbieżności, gdy kierunek przewijania jest ustawiony poziomo. Włączyłem także opcję stronicowania w scenopisie. Moim zdaniem mogę wyświetlać 4 przedmioty naraz. Jeśli mam 5 przedmiotów, pierwsza strona zawiera 4 przedmioty, ale druga strona zawiera 3 przedmioty. Poprzednie pozycje są również wyświetlane na drugiej stronie.UICollectionView Przewijanie w poziomie pokazuje poprzednie pozycje nawet po włączeniu stronicowania.

Po prostu pytam, jak mogę temu zapobiec? Chcę 4 przedmioty na pierwszej stronie i tylko 1 pozycję na drugiej stronie. Zastanawiam się nad dodaniem przedmiotów i ustawieniem ich w tym celu. Czy to właściwy sposób na rozwiązanie tego problemu?

Dziękuję bardzo!

+0

Czy byłeś w stanie rozwiązać ten problem? Wydaje mi się, że mam ten sam problem. Mam 4 przedmioty łącznie, a każda strona powinna zawierać po trzy pozycje. Pierwsza strona zostanie poprawnie utworzona, ale szerokość drugiej strony jest oczywiście tylko tak szeroka, jak czwarty element, więc nigdy nie wydaje się, aby strona była na drugiej stronie ... druga "strona" zawiera elementy 2, 3 i 4 i odskakuje. Zamiast tego oczekiwałby, że będzie miał tylko jeden element na stronie drugiej. Każda pomoc zostanie doceniona! –

Odpowiedz

0

Być może można ustawić właściwość contentSize w UICollectionView na następną wielokrotność jego bounds?

np. dla pojedynczej sekcji widoku kolekcji:

NSUInteger itemsPerPage = 4; 
NSUInteger pageCount = (NSUInteger) ceilf((float)[collectionView.dataSource numberOfItemsInSection:0]/itemsPerPage); 
CGFloat contentWidth = collectionView.bounds.size.width * pageCount; 
collectionView.contentSize = CGSizeMake(contentWidth, collectionView.contentSize.height); 
+0

W którym momencie należy to zrobić? Próbowałem go w viewWillAppear i viewDidAppear i nie działało. Zastanawiam się, czy było na to dobre miejsce. –

0

I napotkał podobny problem, i rozwiązać go w dość hackish-uczucie sposób, ale działa i jestem zadowolony z niego teraz.

Zasadniczo zdecydowałem, aby umieścić strony widoku kolekcji z pustymi komórkami UICollectionViewCell.

Najpierw obliczyłem, ile będzie wszystkich elementów. Jeśli całkowita liczba elementów dostarczonych przez mój NSFetchedResultsController nie jest dokładną wielokrotnością trzech, to dodaję wymaganą liczbę elementów, aby całkowita była wielokrotnością trzech.

Na przykład, jeśli mam cztery kategorie powrotem, będę musiał dodać dwa więcej, aby uczynić to w sumie sześć:

#define ITEMS_PER_PAGE 3 

//... 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    NSArray *sections = [categoriesFetchedResultsController sections]; 
    id <NSFetchedResultsSectionInfo> sectionInfo = sections[section]; 

    NSInteger categoryCount = [sectionInfo numberOfObjects]; 
    NSInteger extraItemsNeeded = ITEMS_PER_PAGE - (categoryCount % ITEMS_PER_PAGE); 
    NSInteger totalItems = categoryCount + extraItemsNeeded; 

    NSInteger pages = (NSInteger)(totalItems/ITEMS_PER_PAGE); 
    self.pageControl.numberOfPages = pages; 
    return totalItems; 
} 

Potem, gdy przychodzi czas generowania komórek, I wykonaj następujące:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
     CategoryCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CategoryCell" forIndexPath:indexPath]; 
     // use a generic UICollectionCell for the "empty cell" case.   
     UICollectionViewCell *emptyCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"EmptyCell" forIndexPath:indexPath]; 

     if (indexPath.row < [[categoriesFetchedResultsController fetchedObjects] count]) { 
      NSManagedObject *object = [categoriesFetchedResultsController objectAtIndexPath:indexPath]; 
      NSData *imageData = [object valueForKey:@"thumbnail_data"]; 
      NSString *name = [object valueForKey:@"category_name"]; 

      cell.image.image = [UIImage imageWithData:imageData]; 
      cell.label.text = name; 
      return cell; 
     } 

     return emptyCell; 
    } 

mam nadzieję, że ktoś pomoże w przyszłości, ponieważ rozwiązanie tego problemu nie było tak proste, jak powinno być, i byłem zaskoczony, że układ przepływu nie tylko automatycznie obliczy stron odpowiednio.

Powiązane problemy