Как отцентрировать кнопку в горизонтальном стеке? - PullRequest
0 голосов
/ 26 сентября 2018

У меня горизонтальный стековый вид с двумя кнопками.Теперь я хочу, если одна кнопка скрыта, другая должна быть в центре.

как,

[x   x]
[  x  ] 

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Как насчет использования некоторых скрытых UIViews?

  • Объявите stackView в вашем классе:

    var myFirstStack: UIStackView!
    var bool = true
    

bool - логическое значениеэто будет имитировать условие, когда вы захотите скрыть или показать кнопку.

  • Инициализируйте stackView в viewDidLoad:

    myStack = UIStackView(arrangedSubviews: createButtons("1", "2"))
    let v1 = UIView()
    v1.isHidden = true
    let v2 = UIView()
    v2.isHidden = true
    myStack.insertArrangedSubview(v1, at: 1)
    myStack.addArrangedSubview(v2)
    myStack.translatesAutoresizingMaskIntoConstraints = false
    myStack.axis = .horizontal
    myStack.spacing = 20
    myStack.distribution = .fillEqually
    
    view.addSubview(myStack)
    

Используется эта функция:

func createButtons(_ named: String...) -> [UIButton] {
    var i = true
    return named.map { name in
        let btn = UIButton()
        btn.translatesAutoresizingMaskIntoConstraints = false
        btn.setTitle(name, for: .normal)
        btn.backgroundColor = i ? .yellow : .red
        i.toggle()
        btn.setTitleColor(.black, for: .normal)
        return btn
    }
}
  • Добавьте ограничения автопоставки:

    myFirstStack.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
    myFirstStack.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
    myFirstStack.heightAnchor.constraint(equalToConstant: 100).isActive = true
    myFirstStack.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    

Вот как это выглядитдо сих пор:

2 buttons

  • Когда нажата третья кнопка, UIViews скрыты или показаны:

    @IBAction func hide(_ sender: Any) {
        myFirstStack.arrangedSubviews[0].isHidden = bool  //This is the button to hide
        myFirstStack.spacing = bool ? -100 : 20           //Adjust the spacing to your liking 
        myFirstStack.arrangedSubviews[1].isHidden = !bool //Hide or show the first UIView
        myFirstStack.arrangedSubviews[3].isHidden = !bool //Hide or show the second UIView
        bool.toggle()
    }
    

И вот результат:

one button

0 голосов
/ 27 сентября 2018

Установите атрибут распределения UIStackView на Заполнить одинаково либо из раскадровки, либо программно:

stackView.distribution = .fillEqually

Как только кнопка скрыта, другая будет отцентрирована.

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