Обращаясь к идее использования al oop, если у вас есть информация о вашем макете в переменных, таких как
let numberOfRows: Int
let buttonsPerRow: [Int]
Тогда при построении вашего макета вы можете l oop поверх них, например:
let verticalStackView = UIStackView()
//configure distribution, axis...
for i in 0..<numberOfRows {
let horizontalStackView = UIStackView()
//configure distribution, axis...
for _ in 0..<buttonsPerRow[i] {
let b = UIButton()
//configure button
horizontalStackView.addArrangedSubview(b)
}
verticalStackView.addArrangedSubview(horizontalStackView)
}