iOS 12: Как программно добавить UIView в UIViewController? - PullRequest
0 голосов
/ 12 октября 2018

Я использую старый способ ввода UIView до UIViewController, но после обновления до iOS 12 он не будет работать, и ошибка: libc++abi.dylib: terminating with uncaught exception of type NSException

Вот код

class SlideOutMenu: UIViewController {
    var contentView:UIView!

    func setContentViewIn(view: UIView) {
        self.contentView = view
        self.view.addSubview(self.contentView)
    }
}

Тогда

class MainController: UIViewController {
    var slide = SlideOutMenu()
    var viewToAdd = ViewToAdd() // extends UIView
    override func viewDidLoad()
    {
        super.viewDidLoad()
        slide.setContentViewIn(viewToAdd)
    }
}

Это не работает, но если я так заявляю, это работает

class SlideOutMenu: UIViewController {
    var contentView:UIView!
    convenience init(childView: UIView) {
        self.init(nibName:nil, bundle:nil)
        self.contentView = childView
    }

    override func viewDidLoad() {
        view.addSubview(self.contentView)
    }
}

И используйте

SlideOutMenu(childView: UIView())

Это работает.

Но вот так это не так.Это странно

SlideOutMenu(childView: viewToAdd)

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вот пример того, как я строю представления программно:

class InformationController: UIViewController {

    let labelDescription: UILabel = {
        let label = UILabel()

        label.text = "Label Name"
        // this is important for auto layout to work
        label.translatesAutoresizingMaskIntoConstraints = false

        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        setupView()
    }

    private func setupView() {
        // add the view
        view.addSubview(labelDescription)

        // set the auto layout and enable the constraints
        labelDescription.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
        labelDescription.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 10).isActive = true
        labelDescription.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        labelDescription.heightAnchor.constraint(equalToConstant: 25).isActive = true
    }
}
0 голосов
/ 12 октября 2018

Этот код ниже, работающий в iOS 12, проверен * import UIKit

Класс ViewController: UIViewController {

var view1 : UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    view1 = UIView.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    view1.center = self.view.center
    view1.backgroundColor = .red
    self.view.addSubview(self.view1)
}

} *

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