Сбой UIScrollView при попытке прокрутить экран влево или вправо - PullRequest
0 голосов
/ 19 сентября 2019

Моя иерархия: scrollView> UiView (назвал его contentView)> imageView.

У меня sv прикреплен к l, r, t, b родительского представления, представление содержимогоприкрепленный к t, b sv и ширине родительского представления, и imageView, прикрепленный к l, r, t, b в contentView.

При использовании iPad изображение занимает весь экран.Когда я провожу вверх и вниз, прокрутка scrollView без проблем.При пролистывании влево или вправо происходит сбой:

* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «* - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нулевой объект из объектов [0] '

Почему я могу без проблем прокручивать вверх и вниз, но при попытке прокрутки влево или вправо происходит сбой?

MyVC: UIViewController, UIScrollViewDelegate {

lazy var scrollView: UIScrollView = {
    let scrollView = UIScrollView()
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.backgroundColor = .white
    return scrollView
}()

lazy var containerView: UIView = {
    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

lazy var imageView: UIImageView = {
    let imageView = UIImageView()
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.contentMode = .scaleAspectFill
    return imageView
}()

override func viewDidLoad() {
    super.viewDidLoad()


    scrollView.delegate = self
    scrollView.minimumZoomScale = 1.0
    scrollView.maximumZoomScale = 6.0

    setAnchors()
}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
}

func setAnchors() {

    view.addSubview(scrollView)
    scrollView.addSubview(containerView)
    containerView.addSubview(imageView)

    scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    scrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

    containerView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    containerView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true

    imageView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
    imageView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
    imageView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
    imageView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true

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

}

Обновление:

Я пытался использовать эти ограничения, и он все еще падал:

containerView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
containerView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true

1 Ответ

0 голосов
/ 19 сентября 2019

Я обновил часть вашего кода

Я добавляю локальную картинку 00 в imageView

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        scrollView.delegate = self
        scrollView.minimumZoomScale = 1.0
        scrollView.maximumZoomScale = 6.0

        imageView.image = UIImage.init(named: "00")
        setAnchors()
    }

    lazy var scrollView: UIScrollView = {
        let scrollView = UIScrollView()
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.backgroundColor = .white
        return scrollView
    }()

    lazy var containerView: UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    lazy var imageView: UIImageView = {
        let imageView = UIImageView()
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFill
        return imageView
    }()

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return imageView
    }

    func setAnchors() {

        view.addSubview(scrollView)
        scrollView.addSubview(containerView)
        containerView.addSubview(imageView)

        scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        scrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

        containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
        containerView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        containerView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true

        imageView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
        imageView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
        imageView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
        imageView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true

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

Это GIF-файл симулятора iPad.

enter image description here

Я проверил его с iPhone, и он работает.Надеюсь, это поможет вам

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