Установка привязок макета подпредставлений к UIScrollView

Когда я хочу установить главные якоря моих подпредставлений в 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 ответ

Решение

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

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

stackView.addArrangedSubview(lbl)

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

Другие вопросы по тегам