如何将滚动视图的大小设置为与视图的大小相同

how to set size of a scrollview to same size of a view

我有一个视图,视图里面有一个滚动视图。我以编程方式设置滚动视图。但由于某种原因,滚动视图并不完全适合视图。滚动视图与视图具有相同的框架。但由于某种原因,它不起作用。

白色view是scrollview所在的view。 滚动视图是绿色视图。我将背景颜色设置为绿色。 在滚动视图中有一个图像视图。

我的代码:

    var scrollView: UIScrollView = {
            let scrollView = UIScrollView()
            scrollView.showsHorizontalScrollIndicator = false
            scrollView.alwaysBounceVertical = false
                scrollView.alwaysBounceHorizontal = false
                scrollView.isPagingEnabled = true
                return scrollView
            }()

        override func viewDidLoad() {
            super.viewDidLoad()
           scrollView.backgroundColor = .green
scrollView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: contentView.frame.height)                contentView.addSubview(scrollView)

scrollView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 0).isActive = true
        scrollView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true
        scrollView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: 0).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true

}

    var frame = CGRect.zero
        func viewTutorial() {
            for i in 0..<arrayOfTutorilImages.count {
            frame.origin.x = scrollView.frame.size.width  * CGFloat((i))
                frame.size = scrollView.frame.size

                let imageView = UIImageView(frame: frame)
                imageView.image = UIImage(named: arrayOfTutorilImages[i])
                imageView.contentMode = .scaleAspectFit
                self.scrollView.addSubview(imageView)
            }

            scrollView.contentSize = CGSize(width: (scrollView.frame.size.width * CGFloat(arrayOfTutorilImages.count)), height: scrollView.frame.size.height)
            scrollView.delegate = self
        }

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

更新: 我更改了框架并向滚动视图添加了约束。现在它看起来像这样。图像未调整大小(此图像为蓝色绘图)

我建议您使用约束:

        self.scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
        self.scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
        self.scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
        self.scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)

如果你喜欢 UIView+Helpers,你可以为此创建一个辅助方法,并且只使用一行。

extension UIView {
    public func pinToEdges(of view: UIView,
                           topConstant: CGFloat = 0,
                           leadingConstant: CGFloat = 0,
                           bottomConstant: CGFloat = 0,
                           trailingConstant: CGFloat = 0) {

        NSLayoutConstraint.activate([
            self.topAnchor.constraint(equalTo: view.topAnchor, constant: topConstant),
            self.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: leadingConstant),
            self.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: bottomConstant),
            self.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: trailingConstant),
            ])
    }
}

然后使用:

self.scrollView.pinToBounds(self.view)

当然记得将 translatesAutoresizingMaskIntoConstraints 设置为 false