水平UIScrollView不在当前页面居中

时间:2019-04-25 17:25:07

标签: ios swift

我想要一个水平滚动的布局来显示图像。如果设置0、0、0和0是UIScrollView的约束,则它可以正常工作。问题恰恰是当我更改约束以使边距包围UIScrollView时。这就是发生的情况:

First image UIScrollView中的第一张图片 Second image UIScrollView中的第二个图像 Third image UIScrollView中的第三张图片

如您所见,每次滚动时,当前页面越偏心。

我试图将尾随和前导约束常量减去到scrollLayout的宽度,使用帧和键进行播放,但没有成功。

如果我在iPhone 5S等较小的显示器上运行此示例,则问题更加明显。

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var pageController: UIPageControl!
    @IBOutlet weak var scrollView: UIScrollView!
    let imagesArray = ["b_1", "b_2", "b_3", "b_4", "b_5"]
    override func viewDidLoad() {
        super.viewDidLoad()
        self.scrollView.isPagingEnabled = true
        self.pageController.numberOfPages = imagesArray.count
        self.pageController.pageIndicatorTintColor = UIColor.blue
        self.pageController.currentPageIndicatorTintColor = UIColor.gray
        for i in 0...imagesArray.count - 1{
            let imageView = UIImageView()
            imageView.contentMode = .scaleToFill
            imageView.image = UIImage(named: self.imagesArray[i])
            let xPos = CGFloat(i)*self.view.bounds.size.width
            imageView.frame = CGRect(x: xPos, y: 0, width: view.frame.size.width, height: self.scrollView.frame.size.height )
            self.scrollView.contentSize.width = view.frame.size.width*CGFloat(i+1)
            self.scrollView.addSubview(imageView)
        }
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let page = scrollView.contentOffset.x/scrollView.frame.width
       self.pageController.currentPage = Int(page)
    }


}

因此,我想知道如何始终获取当前居中的图像。

谢谢

使用Rajesh结果编辑并查看调试:

REsult 1 REsult 2 REsult 3

1 个答案:

答案 0 :(得分:1)

我建议使用UICollectionView代替UIScrollView-否则,您将从头开始构建许多基础知识。您可以使用以图像为中心的集合视图,确保已启用分页,并且应该获得所需的界面。确保视图控制器采用/遵守UICollectionViewDelegateUICollectionViewDelegateFlowLayout协议,并在集合视图上设置这些委托。希望有帮助!祝你好运。