我制作了一个自定义视图,其中包含一个按钮,该按钮将从其超级视图中删除该视图。该视图是从作为超级视图的视图控制器创建的。我在自定义视图类中为视图设置了约束,如下所示,但我认为它们有问题。
// 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
我该如何解决?谢谢。
答案 0 :(得分:1)
在从其超级视图中删除该视图之前,可能有助于调用NSLayoutConstraint.deactivate(yourView.constraints)
但是,了解视图类中的何处调用约束代码会很有帮助。通常,最好在viewController中设置约束,然后在需要时也从视图控制器中删除视图,这可能会解决问题。
答案 1 :(得分:0)
我找到了解决方法,但是不确定它是否有效。 我所做的是覆盖removefromsuperview函数并删除了那里的所有约束和子视图
override func removeFromSuperview() {
for view in self.subviews{
view.removeFromSuperview()
}
NSLayoutConstraint.deactivate(self.constraints)
removeAllConstraintsFromView(view: self)
}
尽管我不确定是否要从内存中取消分配自定义视图