我做了一个自定义视图,里面有一个按钮,可以从其超级视图中删除该视图。视图是从视图控制器创建的,该控制器是超级视图。我已经在我的自定义视图类中为我的视图设置了约束,如下所示,但我认为它们是有问题的。
// 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)
}
虽然我不确定这样做是否从内存中解除分配我的自定义视图