UIImageViews 在带有分页的 UIScrollView 中无法正确缩放

UIImageViews not scaling correctly in UIScrollView with paging

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

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

我在 Interface Builder 中有一个 UIScollView 和一个 UIPageControl,在我的 ViewController swift 文件中有 link。

这是我的 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
}

谁能发现我的错误?我是否必须在 viewWillAppearviewDidAppear 中设置 contentMode

尝试在以下条件下设置您的 imageViews 尺寸:

  • (void)viewDidLayoutSubviews

此时,自动布局已根据您在界面生成器上定义的布局系统完成调整 views/subviews 的大小,因此如果您的计算正确(根据您的要求),这应该可以正常工作。