UIStackView растягивает вспомогательный вид, выравнивая его - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь выложить StackView программно, эффект, которого я хотел бы достичь, это strong text

, но вместо этого я получаю

enter image description here

Я не понимаю, почему loadingDotView растягивается, чтобы заполнить все пространство?

   let loadingDotView: UIView = {
        let ldv = UIView()
        ldv.backgroundColor = .white
        ldv.alpha = 0
        ldv.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
        ldv.layer.cornerRadius = 10
        ldv.layer.masksToBounds = true
        ldv.translatesAutoresizingMaskIntoConstraints = false
        return ldv
    }()

    let dotsStackView: UIStackView = {
        let stackView = UIStackView()
        stackView.axis = .horizontal
        stackView.distribution = .equalSpacing
        stackView.translatesAutoresizingMaskIntoConstraints = false
        return stackView
    }()

Код установки ...

   view.addSubview(dotsStackView)



    NSLayoutConstraint.activate([
            dotsStackView.heightAnchor.constraint(equalToConstant: 20),
            dotsStackView.widthAnchor.constraint(equalToConstant: 100),
            dotsStackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            dotsStackView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])



    dotsStackView.addArrangedSubview(loadingDotView)
    dotsStackView.addArrangedSubview(loadingDotView)
    dotsStackView.addArrangedSubview(loadingDotView)

1 Ответ

0 голосов
/ 03 декабря 2018

This (закрытие)

let loadingDotView: UIView = {
    let ldv = UIView()
    ldv.backgroundColor = .white
    ldv.alpha = 0
    ldv.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
    ldv.layer.cornerRadius = 10
    ldv.layer.masksToBounds = true
    ldv.translatesAutoresizingMaskIntoConstraints = false
    return ldv
}()

возвращает один и тот же объект при каждом доступе, поэтому появляется только один, создайте его (вычисляемое свойство) для создания нового при каждом доступе

var loadingDotView: UIView {
    let ldv = UIView()
    ldv.backgroundColor = .white
    ldv.alpha = 0
    ldv.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
    ldv.layer.cornerRadius = 10
    ldv.layer.masksToBounds = true
    ldv.translatesAutoresizingMaskIntoConstraints = false
    return ldv
}

и добавьте

stackView.spacing = 20
stackView.distribution = .fillEqually

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...