有没有办法在结合页面控制的滚动视图中自动布局图像?

Posted

技术标签:

【中文标题】有没有办法在结合页面控制的滚动视图中自动布局图像?【英文标题】:Is there a way to auto layout an image in a scroll view combined with page control? 【发布时间】:2020-05-24 11:48:22 【问题描述】:

这是我的第一个条目。我是应用程序设计的新手,来自德国,但我仍然希望你能理解我的问题。我使用了 Xcode 11 和 Swift 5。

我正在使用页面控件和滚动视图在一个屏幕中的图像之间切换。在 iPhone 11 上看起来不错,但在 iPhone 8 上,图像的宽度和高度太大,这就是为什么当页面控件位于第二段时仍然可以看到第一张图像的一部分。第二个图像和第三个片段也是如此。This hopefully shows the problem. 有没有办法让图像适合屏幕尺寸?

这是我的代码:

```
import UIKit

class ViewController: UIViewController, UIScrollViewDelegate 

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

    var Pages: [String] = ["Page1","Page2","Page3"]
    var frame = CGRect.zero


    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        pageControl.numberOfPages = Pages.count //
        setupScreens()
        scrollView.showsHorizontalScrollIndicator = false
        scrollView.showsVerticalScrollIndicator = false
        scrollView.isPagingEnabled = true
        scrollView.delegate = self
    

    func setupScreens() 
        for index in 0..<Pages.count 
            // 1.
            frame.origin.x = scrollView.frame.size.width * CGFloat(index)
            frame.size = scrollView.frame.size

            // 2.
            let imageView = UIImageView(frame: frame)
            imageView.image = UIImage(named: Pages[index])
            self.scrollView.addSubview(imageView)        

        // 3.
        scrollView.contentSize = CGSize(width: (scrollView.frame.size.width * CGFloat(Pages.count)), height: scrollView.frame.size.height)
        scrollView.delegate = self


    

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 
        let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
        pageControl.currentPage = Int(pageNumber)
    



```

【问题讨论】:

【参考方案1】:

除了在viewDidLoad() 中调用setupScreens() 方法之外,您的代码完全可以正常工作。

viewDidLayoutSubviews 中调用该方法,以便获得scrollView 的正确帧。

override func viewDidLayoutSubviews() 
          setupScreens()

从here下载演示

【讨论】:

非常感谢。我在这个问题上坐了大概两个小时。

以上是关于有没有办法在结合页面控制的滚动视图中自动布局图像?的主要内容,如果未能解决你的问题,请参考以下文章

页面应用程序 + 自动布局 + 子视图在滚动时缩放

在滚动视图中使用自动布局缩放图像如何居中?

从 NIB 加载视图以用作滚动视图中的页面会取消自动布局

表格视图中单元格内的自动布局图像。正确的布局,但只有一次向下滚动和备份?

Xamarin iOS:滚动视图中的自动布局?

如何使用自动布局调整情节提要的图像大小?