Почему я получаю предупреждение Nil Layout Anchor при представлении своего пользовательского UIAlert? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть пользовательский UIAlert, в котором я установил контроллер представления контента на свой собственный V C. Предупреждение работает правильно, но я продолжаю получать эту ошибку: «Метод фабрики ограничений был передан без привязки макета». Я подозреваю, что это как-то связано с тем, как я добавляю свои подпредставления, но я пытался ограничить их безрезультатно. Вот код:

    let vc = UIViewController()
    vc.preferredContentSize = CGSize(width: 250,height: 150)
    let sortByPicker = UIPickerView(frame: CGRect(x: 0, y: 0, width: 250, height: 150))
    sortByPicker.tag = 1
    sortByPicker.delegate = self
    sortByPicker.dataSource = self

    vc.view.addSubview(sortByPicker)

    let editRadiusAlert = UIAlertController(title: "Sort Projects By...", message: "", preferredStyle: UIAlertController.Style.alert)

    editRadiusAlert.setValue(vc, forKey: "contentViewController")
    editRadiusAlert.addAction(UIAlertAction(title: "Done", style: .default, handler: nil))
    editRadiusAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    self.present(editRadiusAlert, animated: true)

1 Ответ

0 голосов
/ 24 февраля 2020

Вероятно, это потому, что вы установили contentViewController до того, как родительский контроллер представления (контроллер оповещений) был добавлен в иерархию представления.

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

Если вы действительно хотите go, я советую вам следовать Лев Ответ Натана и подкласс UIAlertController. Если затем вы назначите contentViewController в viewDidLoad(), все должно быть настроено правильно, включая привязки макета родителя.

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