使用 UIScrollView 和自动布局的图像滑块

Posted

技术标签:

【中文标题】使用 UIScrollView 和自动布局的图像滑块【英文标题】:Image Slider using UIScrollView and Auto Layout 【发布时间】:2018-12-09 07:52:58 【问题描述】:

我正在尝试使用 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 中运行代码,照片就无法适应新的滚动视图大小。我已经为滚动视图添加了约束,使得顶部、前导、尾随和底部等于超级视图的顶部、前导、尾随和底部。调试时,我发现 UIImageView 的 frame 仍然使用 iPhone 8 上的旧宽度。

是否有任何解决方法,无论是通过编程方式还是使用界面构建器?谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用 UIScrollView 和自动布局的图像滑块的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不使用自动布局约束

UIScrollView 不使用自动布局约束

使用自动布局问题在 UIScrollView 中调整 UITextView 的大小

uiscrollview的自动布局,视图层次结构没有为约束做好准备

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

UIScrollView 内的自动布局 UITextView 大小不正确