Добавление кнопок программно в stackView в Swift - PullRequest
0 голосов
/ 30 сентября 2019

Я пытался динамически / программно добавлять кнопки в UIStackView, который я создал с помощью конструктора интерфейсов, но они не отображались при запуске приложения. Количество кнопок, которые должны быть добавлены, обычно составляет от 4 до 6. Ребята, скажите, что не так с кодом

5 buttons 4 buttons code

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

решено!

Кнопка появилась, когда я установил тип кнопки с помощью метода экземпляра init (type:)

0 голосов
/ 30 сентября 2019

@ Сейчас я просто воссоздаю то, чего ты пытаешься достичь. Ниже приведены шаги.

  1. Добавьте UIStackView в viewController из Interface Builder и добавьте необходимые ограничения.
  2. Добавьте следующий код.

    override func viewDidLoad() {
       super.viewDidLoad()
    
       let button = UIButton()
       button.setTitle("btn 1", for: .normal)
       button.backgroundColor = UIColor.red
       button.translatesAutoresizingMaskIntoConstraints = false
    
       let button2 = UIButton()
       button2.setTitle("btn 2", for: .normal)
       button2.backgroundColor = UIColor.gray
       button2.translatesAutoresizingMaskIntoConstraints = false
    
       let button3 = UIButton()
       button3.setTitle("btn 3", for: .normal)
       button3.backgroundColor = UIColor.brown
       button3.translatesAutoresizingMaskIntoConstraints = false
    
       buttonStackView.alignment = .fill
       buttonStackView.distribution = .fillEqually
       buttonStackView.spacing = 8.0
    
       buttonStackView.addArrangedSubview(button)
       buttonStackView.addArrangedSubview(button2)
       buttonStackView.addArrangedSubview(button3)  
    
    }
    

Ниже приводится результат. enter image description here

Надеюсь, это поможет.

0 голосов
/ 30 сентября 2019

Я думаю, вам нужно сделать еще несколько шагов, прежде чем кнопка начнет отображаться.

  1. Добавить представление стека к подпредставлениям текущего представления

    view.addSubview(buttonStackView)
    
  2. Теперь каждая из этих кнопок представлений, а также stackView, должны установить для translatesAutoresizingMaskIntoConstraints значение false.

    button1.translatesAutoresizingMaskIntoConstraints = false
    button2.translatesAutoresizingMaskIntoConstraints = false
    buttonStackView.translatesAutoresizingMaskIntoConstraints = false
    
  3. Теперь установите ограничения stackView

    NSLayoutConstraint.activate([
        buttonStackView.topAnchor.constraint(equalTo: view.topAnchor),
        buttonStackView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        buttonStackView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        buttonStackView.trailingAnchor.constraint(equalTo: view.trailingAnchor)])
    
  4. Вам нужно будет указать ограничения или переопределить собственный размер stackView.

     override func intrinsicContentSize() -> CGSize
     {
       return CGSizeMake(200, 40)
     }
    

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

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