kbu*_*rjo 9 uipagecontrol ios uicollectionview swift
我目前正在使用UICollectionView来显示3个图像(每个图像跨越整个单元格).我还有一个UIPageControl,我放在UICollectionView的顶部.我想要发生的是让UIPageControl显示图像的数量(在这种情况下是3),以及用户当前正在查看的图像.我想要的效果是Instagram应用程序的效果.
我目前用来实现这种效果的方法是将UIPageControl的更新放在UICollectionView的willDisplay函数中,如下所示:
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    pictureDots.currentPage = indexPath.item
}
Run Code Online (Sandbox Code Playgroud)
这样可以正确地连接集合视图和页面控件之间的分页效果.但是,我遇到的问题是UIPageControl开始说用户在第三个图像上,即使它正在显示第一个图像.
有谁知道为什么会这样,以及如何解决这个问题?
Cal*_*lam 25
首先将您UIPageControl的故事板添加到故事板中UICollectionView,然后将它们作为插座连接到视图控制器.
@IBOutlet var pageControl: UIPageControl!
@IBOutlet var collectionView: UICollectionView!
Run Code Online (Sandbox Code Playgroud)
调整numberOfItemsInSection方法   UICollectionViewDataSource以将页面控件的计数设置为始终等于集合视图中的单元格数.
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    let count = ...
    pageControl.numberOfPages = count
    pageControl.isHidden = !(count > 1)
    return count
}
Run Code Online (Sandbox Code Playgroud)
最后,使用UIScrollViewDelegate,我们可以告诉UICollectionView停止哪个单元格.如果您不使用a UICollectionViewController,则可能必须添加委托协议.
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    pageControl?.currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width)
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
    pageControl?.currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width)
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,因为UICollectionView实际上是一个UIScrollView引擎盖下.
Ari*_*ora 11
步骤1 为Collection View和Page Control创建变量
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet var pageControl:UIPageControl!     
Run Code Online (Sandbox Code Playgroud)
步骤2设置页面控制的页数
override func viewDidLoad() {
    super.viewDidLoad()         
    self.pageControl.numberOfPages = procedures.count
    //Set the delegate
    self.collectionView.delegate = self
}
Run Code Online (Sandbox Code Playgroud)
*步骤3在scrollViewDidScroll函数中计算集合单元格的宽度和当前页面的索引.
    extension YourCollectionVC: UICollectionViewDataSource, UICollectionViewDelegate {
            override func scrollViewDidScroll(_ scrollView: UIScrollView) {
                let witdh = scrollView.frame.width - (scrollView.contentInset.left*2)
                let index = scrollView.contentOffset.x / witdh
                let roundedIndex = round(index)
                self.pageControl?.currentPage = Int(roundedIndex)
            }
}
Run Code Online (Sandbox Code Playgroud)
注意:这是针对水平显示的集合视图,对于垂直方向更改方法.
在swift 4中测试过.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           8949 次  |  
        
|   最近记录:  |