UIImageViews在UIScrollView中无法使用分页正确缩放

时间:2015-04-25 11:53:22

标签: ios swift uiscrollview uiimageview scroll-paging

我试图构建一个非常简单的UIScrollView,其中包含几个启用了分页的图像。

然而,我无法将图像正确地调整到我UIScrollView的范围。图像总是比边界大,因此弄乱了我的分页。

我在UIScollView中有一个UIPageControl和一个Interface Builder,并将其链接到我的ViewController swift文件中。

以下是我的viewDidLoad方法(pageImages定义为var pageImages: [UIImage] = []pageViews定义为var pageViews: [UIImageView?] = []

override func viewDidLoad() {
    scrollView.delegate = self
    scrollView.pagingEnabled = true
    scrollView.scrollEnabled = true
    scrollView.showsHorizontalScrollIndicator = false
    scrollView.showsVerticalScrollIndicator = false
    scrollView.bounces = true
    scrollView.scrollsToTop = false

    pageImages = [UIImage(named: "image1")!,
        UIImage(named: "image2")!,
        UIImage(named: "image3")!,
        UIImage(named: "image4")!,
        UIImage(named: "image5")!]

    let pageCount = pageImages.count

    pageControl.currentPage = 0
    pageControl.numberOfPages = pageCount

    for (var i=0; i<pageCount; i++) {
        var xOrigin: CGFloat = CGFloat(i) * scrollView.bounds.size.width

        let imageView: UIImageView = UIImageView(frame: CGRectMake(xOrigin, 0, scrollView.bounds.size.width, scrollView.bounds.size.height))
        imageView.image = pageImages[i]
        imageView.contentMode = UIViewContentMode.ScaleAspectFill
        imageView.clipsToBounds = true
        scrollView.addSubview(imageView)
    }


    let pagesScrollViewSize = scrollView.frame.size
    scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(pageImages.count),
        height: pagesScrollViewSize.height)
}

我的scrollViewDidScroll方法如下:

func scrollViewDidScroll(scrollView: UIScrollView) {
    let pageWidth = self.scrollView.frame.size.width
    let page = Int(floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1)
    self.pageControl.currentPage = page
}

有人能发现我的错误吗?我是否必须将contentMode设置为viewWillAppearviewDidAppear

1 个答案:

答案 0 :(得分:3)

尝试在以下位置设置imageViews尺寸:

  • (无效)viewDidLayoutSubviews

此时,autolayout已根据您在界面构建器上定义的布局系统完成了视图/子视图的大小调整,因此如果您的计算是正确的(根据您的要求),这应该可以正常工作。

相关问题