Swift - 如何在scrollview中应用调整大小图像

时间:2015-09-25 09:02:50

标签: swift uiscrollview

我有以下滚动视图代码

class ViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var pageControl: UIPageControl!

var imageArray = [UIImage(named: "mainScrollView1"), UIImage(named: "mainScrollView2"), UIImage(named: "mainScrollView3"),]

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    configurePageControl()

    scrollView.pagingEnabled = true
    scrollView.showsHorizontalScrollIndicator = false
    scrollView.delegate = self

    for var i = 0; i < imageArray.count; i++  {

        if i == 0 {

            var imageView = UIImageView(frame: CGRectMake(0, 0, scrollView.frame.size.width, 160))
            imageView.image = imageArray[i]
            scrollView.addSubview(imageView)

        } else {

            var float: CGFloat = CGFloat(i)
            var imageView = UIImageView(frame: CGRectMake(scrollView.frame.size.width * float, 0, scrollView.frame.size.width, 160))
            imageView.image = imageArray[i]
            scrollView.addSubview(imageView)

        }
    }

    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width*3, scrollView.frame.size.height)

}

func configurePageControl() {

    self.pageControl.numberOfPages = 3
    self.pageControl.currentPage = 0
    self.pageControl.tintColor = UIColor.redColor()
    self.pageControl.pageIndicatorTintColor = UIColor.blackColor()
    self.pageControl.currentPageIndicatorTintColor = UIColor.whiteColor()
    self.view.addSubview(pageControl)

}

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    pageControl.currentPage = Int(pageNumber)
}

}

问题是内部的图像滚动静态图像,它们不会因不同的屏幕尺寸而改变它们的尺寸,因此它看起来像这样

enter image description here

如您所见,第一张图片不会扩展以填满整个屏幕宽度,因为可以看到第二张图像的这一部分

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该在视图布局所有子视图后更新图像大小。你应该在viewDidLayoutSubviews

中做到这一点

这样的事情:

var imageArray = [UIImage(named: "mainScrollView1"), UIImage(named: "mainScrollView2"), UIImage(named: "mainScrollView3"),]
var imageViews:[UIImageView] = []

override func viewDidLoad() {
    super.viewDidLoad()
    configurePageControl()

    scrollView.pagingEnabled = true
    scrollView.showsHorizontalScrollIndicator = false
    scrollView.delegate = self

    for image in imageArray {
        var imageView = UIImageView(image: image)
        scrollView.addSubview(imageView)
        imageViews.append(imageView)
    }
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    for (index,imageView) in imageViews.enumerate() {
        imageView.frame = CGRectMake(CGFloat(index)*scrollView.frame.size.width, 0, scrollView.frame.size.width, 160)
    }
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width*3, scrollView.frame.size.height)
}