从Superview崩溃中删除视图

时间:2019-03-23 18:50:15

标签: ios swift iphone mobile

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

// 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

我该如何解决?谢谢。

2 个答案:

答案 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)
}

尽管我不确定是否要从内存中取消分配自定义视图