AntonBrock
@AntonBrock
screen light

Что я делаю не так при создание UIStackView программно?

Цель:
Создать вот такую штуку, программно:
5f6fcbbbd736e072859771.png

Что я сделал:
class CHDotsView: UIStackView {
    
    var dotsCount: Int?
    
    init(frame: CGRect = CGRect(x: 0, y: 0, width: 0, height: 0), dotsCount: Int, width: CGFloat, height: CGFloat) {
        super.init(frame: frame)
        
        self.axis = .horizontal
        self.distribution = .equalSpacing
        self.spacing = 20
        
        self.dotsCount = dotsCount
       
        for _ in 1 ... dotsCount {
            let dotsView = UIView()
                    
            dotsView.backgroundColor = .red
            dotsView.layer.cornerRadius = width / 2
            dotsView.frame.size.width = width
            dotsView.frame.size.height = height
                        
            self.addArrangedSubview(dotsView)
        }
    }
    
    required init(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}


После чего вызываю в нужном мне контролере:
func setupDotView() { // данный метод вызывается во ViewDidLoad
        let dotsContainer = UIView()
        let dots = CHDotsView(dotsCount: 1, width: 10, height: 10)
        
        dotsContainer.addSubview(dots)
        
        dotsContainer.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(dotsContainer)
        
        NSLayoutConstraint.activate([
            dotsContainer.widthAnchor.constraint(equalToConstant: 200),
            dotsContainer.heightAnchor.constraint(equalToConstant: 100),
            dotsContainer.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 120),
            dotsContainer.centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
        ])
    }


Вот так выглядит debugUI:
5f6fcc9da017e181460714.png

Вопрос:
Что я сделал не так? Нет ни ошибок, ни предупреждений. Просто не вижу UIView, которые я создал и запушил в UIStackView.
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
@Snak59
Используемый вами инициализатор в наследуемом классе ограничивает размеры uistackview используя заданный frame и не позволяет ему изменять размеры в соответсвии с добавленными dots. Необходимо создание стека через пустой инициализатор, но он не наследуется, или я не нашел как это сделать) Если вы не собираетесь расширить функционал stackview лучше не использовать наследование - по сути стэк это контейнер служащий для представления и не несущий дополнительного функционала.
5f7033d8b127f945222440.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы