使用UIScrollView和自动版式的图像滑块

时间:2018-06-30 08:38:47

标签: swift uiscrollview uiimageview ios-autolayout uipagecontrol

我正在尝试使用scrollView和pageControl实现图像滑块,并使用.addSubView方法以编程方式将图像附加到scrollView上。代码如下:

@IBOutlet weak var sliderScrollView: UIScrollView!
@IBOutlet weak var sliderPageControl: UIPageControl!
var images: [String] = ["0", "1", "2"]

func updateSlider() {
        sliderPageControl.numberOfPages = images.count

        for index in 0..<images.count {
            frame.origin.x = sliderScrollView.frame.size.width * CGFloat(index)
            print(sliderScrollView.frame.size.width)
            frame.size = sliderScrollView.frame.size

            let image = UIImageView(frame: frame)
            image.contentMode = .scaleAspectFill
            image.image = UIImage(named: cafeObject.images[index])
            sliderScrollView.addSubview(image)
        }
        sliderScrollView.contentSize = CGSize(width: sliderScrollView.frame.size.width * CGFloat(cafeObject.images.count), height: sliderScrollView.frame.size.height)
        sliderScrollView.delegate = self
        sliderPageControl.currentPage = 0
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width

    switch scrollView {
    case sliderScrollView:
        sliderPageControl.currentPage = Int(pageNumber)
    default:
        break
    }
}

当我在iPhone 8布局上设计情节提要时,上面的代码可在iPhone 8上很好地使用。但是,一旦在iPhone 8 Plus中运行代码,该照片将无法适应新的scrollView尺寸。我在scrollView中添加了约束,以使顶部,前导,结尾和底部等于超级视图的顶部,前导,结尾和底部。调试时,我意识到UIImageView的框架仍使用iPhone 8上的旧宽度。

通过编程或使用界面生成器对此有任何解决方法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,我设法通过将updateSlider()函数放在viewDidLayoutSubviews()下来解决了这个问题!