Как использовать вид контейнера программно - PullRequest
0 голосов
/ 01 июля 2019

Я создал ViewController, и я хочу добавить в мой ViewController вид контейнера, здесь я устанавливаю вид контейнера внутри моего ViewController:

var containerView: UIView = {
    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.backgroundColor = .red
    return view
}()

func setUpViews() {
    view.addSubview(containerView)
    containerView.heightAnchor.constraint(equalToConstant: 300).isActive = true
    containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    containerView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    containerView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
}

Здесь я установил свой экземпляр SecondViewController в containerView:

override func viewDidLoad() {
    super.viewDidLoad()

    setUpViews()

    let secondViewController = SecondViewController()

    secondViewController.willMove(toParent: self)

    containerView.addSubview(secondViewController.view)
    self.addChild(secondViewController)
    secondViewController.didMove(toParent: self)

}

В моем SecondViewController я объявил метку и представление, я установил метку в центре представления:

let label: UILabel = {
    let label = UILabel()
    label.text = "Hello!"
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(myView)
        myView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        myView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        myView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        myView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true

        view.addSubview(label)
        label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

    }

Это то, что я вижу в своем приложении, но я просил увидеть метку в центре серого вида. Это не работает, как я и думал, и я не понимаю, почему.

image

1 Ответ

1 голос
/ 01 июля 2019

Вам нужно установить фрейм и / или ограничения на загруженном виде:

override func viewDidLoad() {
    super.viewDidLoad()

    setUpViews()

    let secondViewController = SecondViewController()

    secondViewController.willMove(toParent: self)

    containerView.addSubview(secondViewController.view)

    // set the frame
    secondViewController.view.frame = containerView.bounds

    // enable auto-sizing (for example, if the device is rotated)
    secondViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    self.addChild(secondViewController)
    secondViewController.didMove(toParent: self)

}
...