Swift Scroll View последний элемент пуст - PullRequest
0 голосов
/ 03 июня 2018

В настоящее время я изучаю swift, и у меня есть проект, в котором я должен отображать три изображения с помощью вида прокрутки, но проблема в том, что при прокрутке трех изображений вид прокрутки продолжает работать, как я могу только прокручиватьтам изображения.вот мой код

import UIKit

class ViewController: UIViewController {

    var images = [UIImageView]()
    var contentWidth: CGFloat = 0.0

    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()


        for x in 0...2 {
            let image = UIImage(named: "icon\(x).png")
            let imageView = UIImageView(image: image)
            images.append(imageView)

            var newX: CGFloat = 0.0
            newX = view.frame.midX + view.frame.size.width * CGFloat(x)

            contentWidth += newX

            scrollView.addSubview(imageView)

            imageView.frame = CGRect(x: newX - 75, y: (view.frame.size.height / 2) - 75, width: 150, height: 150)

        }

        scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)

    }

}

вот как это выглядит -

Первый элемент изображения -

first image item

Второй элемент изображения-

second image item

Третий элемент изображения -

third image item

Четвертый элемент, который не должен появляться -

fourth item which is not supposed to appear

1 Ответ

0 голосов
/ 03 июня 2018

Ваш код имеет несколько проблем:

  1. Размер view не установлен должным образом во время вызова viewDidLoad().Переместите свой код на override из viewDidLayoutSubviews, чтобы убедиться, что у вас правильный размер представления.Однако будьте осторожны, эта подпрограмма будет вызываться несколько раз, поэтому используйте Boolean (с именем, например contentAdded), чтобы отслеживать, добавили ли вы уже содержимое, чтобы предотвратить установку scrollView более одного раза.

  2. Вы увеличиваете contentWidth на неправильную величину.Каждый раз в цикле вы просто хотите, чтобы contentWidth был расширен на ширину view.


Вот обновленный код:

var contentAdded = false

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if !contentAdded {
        contentAdded = true

        for x in 0...2 {
            let image = UIImage(named: "icon\(x).png")
            let imageView = UIImageView(image: image)
            images.append(imageView)

            var newX: CGFloat = 0.0
            newX = view.frame.midX + view.frame.size.width * CGFloat(x)

            contentWidth += view.frame.size.width

            scrollView.addSubview(imageView)

            imageView.frame = CGRect(x: newX - 75, y: (view.frame.size.height / 2) - 75, width: 150, height: 150)

        }

        scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)
    }
}

Примечание: Вы предполагаете, что scrollView имеет те же width и height, что и view, но это не всегда так, если выбыли разметить ваш экран по-другому.Было бы правильнее использовать scrollView.bounds вместо view.frame, чтобы получить ожидаемые результаты, даже если вы сделали scrollView меньше экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...