Я пытаюсь создать представление стека с вложенными представлениями стека представлений для создания сетки. Каждая ячейка в сетке должна иметь метку. У меня проблема в том, что ярлык отображается только в самом первом виде, как на этом снимке экрана :

Код моего основного стека прост:

for _ in 1...5 {
    let view = WeekView()    
    addArrangedSubview(view)
}

И это код представления вложенного стека.

// Function called in init(frame:)
func configureView() {

    spacing = 8

    for _ in 1...7 {
        let view = UIView()
        let label = UILabel()
        view.addSubview(label)
        addArrangedSubview(view)

        label.text = "hi"
        label.textAlignment = .center

        view.widthAnchor.constraint(equalToConstant: 40).isActive = true
        view.translatesAutoresizingMaskIntoConstraints = false

        label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
        label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        label.translatesAutoresizingMaskIntoConstraints = false
    }
}

Любые предложения будут высоко оценены.

1
bohdankoshyrets 28 Май 2017 в 20:48

2 ответа

Лучший ответ

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

label.translatesAutoresizingMaskIntoConstraints = true
label.frame = view.bounds
label.autoresizingMask = [.flexibleWidth, .flexibleHeight]

Вместо

label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
label.translatesAutoresizingMaskIntoConstraints = false 
1
Sulthan 29 Май 2017 в 18:00

Проблема может быть в том, что вы не установили

label.translatesAutoresizingMaskIntoConstraints = false

Пожалуйста, попробуйте установить это непосредственно после создания элемента пользовательского интерфейса:

let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
...
view.widthAnchor.constraint(equalToConstant: 40).isActive = true
view.heightAnchor.constraint(equalToConstant: 40).isActive = true

Тем не менее, в вашем случае я настоятельно рекомендую использовать UICollectionView. Вы получаете много вещей бесплатно, если вы используете его (включая плавную горизонтальную прокрутку). Изображение выглядит так, как будто вы создаете какое-то приложение для календаря. Если вы используете UICollectionView, вы также получаете очень гибкий API для интервалов и общего макета.

0
productioncoder 28 Май 2017 в 20:38