Установка привязок макета подпредставлений к UIScrollView - PullRequest
0 голосов
/ 08 июня 2018

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

Например, если я установлю для моих 2-ых подпредставлений 'topAnchor значение первого * bottomAnchor, оно не будет прокручиваться.Я должен установить их на якорь scrollView.Есть ли лучший способ достичь этого, не задавая константу и не вычисляя расстояние самостоятельно?

Вот мой scrollView:

    scrollView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: 500)
    scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    scrollView.isScrollEnabled = true

    belowContainer.addSubview(scrollView)

    scrollView.topAnchor.constraint(equalTo: belowContainer.topAnchor, constant: 20).isActive = true
    scrollView.leadingAnchor.constraint(equalTo: belowContainer.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: belowContainer.trailingAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: belowContainer.bottomAnchor, constant: 0).isActive = true

И я использую следующие переменные, чтобы получить правильный вертикальный интервалмежду подпредставлениями

    var counter : CGFloat = 0; // height space counter between uiItems below!
    let multiplierHeight : CGFloat = 32 // we multiply our counter by this value to get the right spacing!

И, наконец, я получил привязку своих подпредставлений в цикле for, например:

    for lbl in labelsArray {
        lbl.font = UIFont(name: fontName, size: 20)

        lbl.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: counter * multiplierHeight).isActive = true          
        lbl.heightAnchor.constraint(equalToConstant: 25).isActive = true
        counter += 1
    }

1 Ответ

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

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

Однако вы можете рассмотреть возможность использования стекового представления для достижения своей цели.Прикрепите представление стека к представлению содержимого представления прокрутки, используя ограничения, а затем используйте цикл for, чтобы добавить метки к представлению стека:

stackView.addArrangedSubview(lbl)

Преимущество представления стека заключается в том, что вы этого не сделаетенужно одно ограничение макета.Скорее, само представление стека отвечает за позиционирование своих подпредставлений.

...