Как развернуть запрограммированную UIButton (swift4) - PullRequest
0 голосов
/ 26 августа 2018

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

import UIKit

var aa: [NSLayoutConstraint] = []

class ViewController: UIViewController {

    var btn: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.addSubview(btn)
        let leadingc2 = btn.widthAnchor.constraint(equalToConstant: 80)
        let trailingC2 = btn.heightAnchor.constraint(equalToConstant: 50)
        let topc2 = btn.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: -50)
        let bottomc2 = btn.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: -250)

        aa = [leadingc2,trailingC2,topc2,bottomc2]

        NSLayoutConstraint.activate(aa)
    }
}

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Используйте этот код:

import UIKit

class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(button)
    setupConstraints()
  }

  lazy var button: UIButton = {
    let button = UIButton(type: .system)
    button.setTitle("Button", for: .normal)
    button.backgroundColor = .blue
    //your action here
    button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    return button
  }()

  private func setupConstraints() {
    button.translatesAutoresizingMaskIntoConstraints = false
    let top = NSLayoutConstraint(item: button, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 100)
    let left = NSLayoutConstraint(item: button, attribute: .left, relatedBy: .equal, toItem: view, attribute: .left, multiplier: 1, constant: 50)
    let right = NSLayoutConstraint(item: button, attribute: .right, relatedBy: .equal, toItem: view, attribute: .right, multiplier: 1, constant: -50)
    let height = NSLayoutConstraint(item: button, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 50)
    view.addConstraints([top, left, right, height])
  }

  @objc func buttonAction() {
    print("Button has pressed")
  }

}
0 голосов
/ 26 августа 2018

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

override func viewDidLoad() {
    super.viewDidLoad()

    btn = UITextField() // Create the button like this before using it.
    self.view.addSubview(btn)

    btn.translatesAutoresizingMaskIntoConstraints = false
    let leadingc2 = btn.widthAnchor.constraint(equalToConstant: 80)
    let trailingC2 = btn.heightAnchor.constraint(equalToConstant: 50)
    let topc2 = btn.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: -50)
    let bottomc2 = btn.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: -250)

    aa = [leadingc2,trailingC2,topc2,bottomc2]

    NSLayoutConstraint.activate(aa)

}

Любая переменная, объявленная с !, будет принудительно развернута, а это означает, что если вы забудете создать экземпляр и использовать переменную, она выдаст ошибку ивылетает ваше приложение.

...