J'ai créé un contrôle de page pour une vue de collection, chaque cellule de vue de collection correspond à la hauteur et à la largeur de l'écran. Voici la configuration du contrôle de page:
// Setup the page control func setupPageControl() { pageControl.pageIndicatorTintColor = cellColor pageControl.currentPageIndicatorTintColor = themeColor view.addSubview(pageControl) addPageControlConstraints() } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { pageControl.numberOfPages = collectionViewCellData.count return collectionViewCellData.count } func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { pageControl.currentPage = indexPath.row }
Il y a un petit problème avec le contrôle de page, vérifiez ceci:
Remarquez comment le contrôle de la page change lorsque je ne suis même pas complètement allé à la page suivante, comment puis-je résoudre ce problème?
3 Réponses :
Vous devez utiliser la méthode de UIPageViewControllerDelegate "didFinishAnimating: previousViewControllers: transitionCompleted:" et utiliser le booléen transitionCompleted qui vous aide à mettre à jour votre page
OU
Reportez-vous à ce lien pour utiliser UIPageControl
Hé euh, je n'ai pas trop travaillé avec le contrôle de page mais ici, ma classe n'est pas conforme à uipageviewcontroller J'utilise juste un contrôle de page comme celui-ci "let pageControl = UIPageControl ()"
Ok mon pote regarde la réponse modifiée et renvoie ce lien.
Hé, merci beaucoup mec, tout ce que j'avais à faire était de copier et coller lol.
Le problème est simplement que vous définissez la page currentPage du contrôle de page dans la cellule willDisplay, à propos de laquelle la documentation dit:
Indique au délégué que la cellule spécifiée est sur le point d'être affichée dans la vue de collection.
Il s'agit d'une méthode qui s'appelle avant l'affichage de la cellule.
Vous devez utiliser scrollViewDidEndDecelerating (_ scrollView: UIScrollView)
à vos fins.
Veuillez envisager d'accepter ma réponse si elle a résolu votre problème. Merci.
Grâce à @Dhaval Raval, j'ai trouvé la réponse dans le lien qu'il m'avait fourni, la voici:
func scrollViewDidScroll(_ scrollView: UIScrollView) { let pageIndex = round(scrollView.contentOffset.x/view.frame.width) pageControl.currentPage = Int(pageIndex) }
peut-être avez-vous besoin de scrollViewDidEndDecelerating? pour gérer le défilement terminé, ou vous pouvez gérer le décalage dans scrollViewDidScroll pour comprendre à quel moment vous voulez changer quelque chose