我正在从视图控制器中将自定义子视图添加到导航栏中(宽度从按钮的contentMode = .scaleAspectFit
布局得到):
// navigationBar is just sugar for navigationController.navigationBar
navigationBar?.addSubview(button)
button.centerYAnchor.constraint(equalTo: navigationBar!.centerYAnchor).isActive = true
button.leftAnchor.constraint(equalTo: navigationBar!.leftAnchor, constant: navigationBar!.bounds.size.width / 18).isActive = true
button.heightAnchor.constraint(equalTo: navigationBar!.heightAnchor, multiplier: 0.5).isActive = true
在我的viewDidDisappear
我试图做button.removeFromSuperview()
但最终崩溃了:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法修改由控制器管理的UINavigationBar的约束'
我很难理解。我已尝试标记按钮并将其从UINavigationControllerDelegate
中删除但未成功。
我做的事情根本就是错误吗?
提前致谢。
答案 0 :(得分:3)
首先使所有约束无效并从superview中删除
override func viewDidDisappear(_ animated: Bool) {
button.constraints.forEach { $0.isActive = false }
button.removeFromSuperview()
}
答案 1 :(得分:1)
在我看来,消除约束就像是一种魅力。注意:我使用的是snapKit。在删除navigationBar的子视图之前,我从该子视图中删除了所有约束。
例如:
someSubview.snp.removeConstraints()
someSubview.removeFromSuperview()
仅此而已。