Saya memiliki tampilan dan di dalam tampilan ada tampilan gulir. Saya mengatur scrollview secara terprogram. Tetapi untuk beberapa alasan scrollview tidak cocok dengan tampilan. Scrollview memiliki bingkai yang sama dengan tampilan. Tetapi untuk beberapa alasan itu tidak berfungsi.

enter image description here

Tampilan putih adalah tampilan tempat scrollview berada di dalamnya. Scrollview adalah tampilan hijau. Saya mengatur warna latar belakang menjadi hijau. Di scrollview ada tampilan gambar.

Kode saya:

    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)
        }
    }

PEMBARUAN: Saya mengubah bingkai dan menambahkan batasan ke tampilan gulir. Sekarang terlihat seperti ini. Gambar tidak diubah ukurannya (gambar ini adalah gambar biru)

enter image description here

2
adri567 8 Maret 2020, 13:21

1 menjawab

Jawaban Terbaik

Saya akan merekomendasikan Anda untuk menggunakan batasan:

        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)

Anda dapat membuat metode pembantu untuk ini jika Anda menyukai UIView+Pembantu, dan hanya menggunakan satu baris.

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),
            ])
    }
}

Dan kemudian gunakan:

self.scrollView.pinToBounds(self.view)

Dan ingat tentu saja untuk mengatur translatesAutoresizingMaskIntoConstraints ke false

2
Alejandro L.Rocha 8 Maret 2020, 11:15