Добавить подпредставления программно в ScrollView, используя язык визуального формата - PullRequest
0 голосов
/ 30 апреля 2018

вид прокрутки - макет программно - swift 3

Дорогие друзья: я надеюсь, что кто-то может пересмотреть этот проект и помочь мне до того, как мой мозг будет сожжен. Заранее спасибо.

Задача: Горизонтальная прокрутка - Макет массива из 4 изображений, квадрат 240 × 240 и 20 интервалов. Ограничения для представления прокрутки устанавливаются непосредственно в раскадровке, но подпредставления изображений были добавлены программно с использованием языка визуальных форматов. Размер содержимого для прокрутки предполагается выполненным с помощью этих ограничений.

Что я сделал: установил массив изображений, создал de ImageView программно и добавил массив, используя цикл for. Создайте ограничения, используя визуальный формат. Способ сделать это можно найти в этой статье: http://www.apeth.com/iOSBook/ch20.html.

Здесь ссылка на проект в GitHub https://github.com/ricardovaldes/soloScrollEjercicio

Ограничения для ScrollView добавлены непосредственно в раскадровку.

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var myScroll: UIScrollView!

    var carsArray = [UIImage]()
    var constraints = [NSLayoutConstraint]()

    override func viewDidLoad() {
        super.viewDidLoad()

        carsArray = [#imageLiteral(resourceName: "fasto1"), #imageLiteral(resourceName: "fasto2"), #imageLiteral(resourceName: "fasto3"), #imageLiteral(resourceName: "fasto4")]

        var const = [NSLayoutConstraint]()
        var views: [String: UIView]
        var previous: UIImageView? = nil

        for index in 0..<carsArray.count{
            let newImageView = UIImageView()
            newImageView.image  = carsArray[index]
            newImageView.translatesAutoresizingMaskIntoConstraints = false
            myScroll.addSubview(newImageView)
            self.myScroll.setNeedsLayout()


            views = ["newImageView": newImageView, "myScroll": myScroll]

            if previous == nil{
                const.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:|[newImageView(240)]",  metrics: nil, views: views))
            }
            else{
                const.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:[previous]-20-[newImageView(240)]", metrics: nil, views: ["newImageView": newImageView, "previous": previous!]))
            }

            previous = newImageView

            const.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "H:[previous]|", metrics: nil, views: ["previous": newImageView]))

            const.append(contentsOf: NSLayoutConstraint.constraints(withVisualFormat: "V:|[newImageView(240)]|", metrics: nil, views: views))

        }
        NSLayoutConstraint.activate(const)
    }
}

Несмотря на то, что я пробовал много комбинаций, у меня одна и та же ошибка:

2018-04-29 21: 24: 34.347466-0500 soloScrollEjercicio [12002: 1665919] [LayoutConstraints] Невозможно одновременно удовлетворить ограничения.

1 Ответ

0 голосов
/ 30 апреля 2018

каждый цикл зацикливания, вы добавляете ограничение на вывод правой стороны для просмотра прокрутки добавлен imageView, но между ними есть 20 точек.

 |-previous-20-newOne-|                                ** second round loop **
                     -20-newOne'-|                     ** third round loop  **

это нарушает ограничение ширины изображения (240)

в одну сторону с этим справиться: только добавьте ограничение правой стороны к последнему imageView.

enter image description here

enter image description here

ограничение вида прокрутки в основной раскадровке также имеет разрыв.

+-------------------+
|          |        |
|-scroll view (240)-|

нижнего с вертикальным интервалом для суперпросмотра не должно быть. было бы разбить высоту просмотра прокрутки (240), поэтому удалить ее будет хорошо.

может быть, вам стоит попробовать:

  • установить приоритет ограничения на 999 или другое значение, не равное 1000
  • убрать галочку с установленной коробки
  • удалить его

enter image description here


и теперь ваш вид прокрутки должен быть в порядке.

enter image description here


p.s. Я обнаружил, что ваш справочник основан на iOS 6? в 2018 году запуск с iOS 10 или iOS 11 может быть лучшим выбором.

счастливого взлома :) 1051 *

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