удаление представления от сбоя superview - PullRequest
1 голос
/ 23 марта 2019

Я сделал собственный вид, в котором есть кнопка, которая удаляла бы вид из его суперпредставления.Представление создается из контроллера представления, который является суперпредставлением.Я установил ограничения для моего представления в своем пользовательском классе представления следующим образом, но я предполагаю, что они проблематичны.

// View Contstaints
    translatesAutoresizingMaskIntoConstraints = false
    leadingAnchor.constraint(equalTo: superview!.leadingAnchor, constant: 40).isActive = true
    trailingAnchor.constraint(equalTo: superview!.trailingAnchor, constant: -40).isActive = true
    heightAnchor.constraint(equalToConstant: 420).isActive = true
    centerYAnchor.constraint(equalTo: superview!.centerYAnchor).isActive = true
    backgroundColor = .white
    layer.cornerRadius = 15

Когда я нажимаю кнопку, я получаю Поток 1: Неустранимая ошибка: Неожиданно найдено ноль, покаразвертывание необязательного значения из этого конкретного ограничения представления

leadingAnchor.constraint(equalTo: superview!.leadingAnchor, constant: 40).isActive = true

Как мне обойти это?Спасибо.

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Перед удалением представления из его суперпредставления может помочь вызов NSLayoutConstraint.deactivate(yourView.constraints)

Однако было бы полезно знать, где вы вызываете код ограничения внутри класса представления. В общем случае лучше установить ограничения в viewController, а затем при необходимости удалить представление из контроллера представления, что может решить проблему.

0 голосов
/ 23 марта 2019

Я нашел способ обойти это, но не уверен, что это эффективно. я переопределил функцию removefromsuperview и удалил все ограничения и подпредставления

 override func removeFromSuperview() {
    for view in self.subviews{
        view.removeFromSuperview()
    }
    NSLayoutConstraint.deactivate(self.constraints)

    removeAllConstraintsFromView(view: self)
}

Хотя я не уверен, что таким образом я освобождаю свой пользовательский вид из памяти

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