Установка привязок макета подпредставлений к 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)
Преимущество стекового представления заключается в том, что вам не понадобится одно ограничение макета. Скорее, само представление стека отвечает за позиционирование своих подпредставлений.