从超级视图崩溃中删除视图



我做了一个自定义视图,里面有一个按钮,可以从其超级视图中删除该视图。视图是从视图控制器创建的,该控制器是超级视图。我已经在我的自定义视图类中为我的视图设置了约束,如下所示,但我认为它们是有问题的。

// 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:致命错误:解开可选值时意外发现 nil从视图的这种特定约束

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

我该如何解决这个问题?谢谢。

在从其超级视图中删除视图之前,调用NSLayoutConstraint.deactivate(yourView.constraints)可能会有所帮助

但是,了解在视图类中调用约束代码的位置会很有帮助。通常,最好在 viewController 中设置约束,然后在需要时从视图控制器中删除视图,这可能会解决问题。

我已经

找到了解决方法,但不确定它是否有效。我所做的是覆盖 RemoveFromSuperView 函数并删除那里的所有约束和子视图

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

虽然我不确定这样做是否从内存中解除分配我的自定义视图

相关内容

  • 没有找到相关文章

最新更新