swift - Swift ImagePicker 在自动布局约束上抛出 SIGNAL SIGABRT
问题描述
我正在 Swift5 中构建一个项目,我需要用户上传照片。我已经达到了用户可以打开 ImagePicker 并选择照片的程度,但是每当他们选择图像并返回原始 VC 时,我都会收到 SIGNAL SIGABRT 错误(在帖子底部):
这是我以编程方式添加约束的地方:
func setupLayout(){
imgView.topAnchor.constraint(equalTo: view.topAnchor, constant: 150).isActive = true
imgView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imgView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
imgView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
imgView.heightAnchor.constraint(equalToConstant: 125).isActive = true
topLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
topLabel.topAnchor.constraint(equalTo: imgView.bottomAnchor, constant: 60).isActive = true
topLabel.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -50).isActive = true
topLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true
topLabel.adjustsFontSizeToFitWidth = true
inputBox.topAnchor.constraint(equalTo: topLabel.bottomAnchor, constant: 30).isActive = true
inputBox.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
inputBox.heightAnchor.constraint(equalToConstant: 50).isActive = true
inputBox.widthAnchor.constraint(equalToConstant: 250).isActive = true
btn.topAnchor.constraint(equalTo: inputBox.bottomAnchor, constant: 40).isActive = true
btn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
let navBarImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
navBarImageView.contentMode = .scaleAspectFit
let navBarImage = UIImage(named: "bzaLogo")
navBarImageView.image = navBarImage
self.navigationController?.navigationItem.titleView = navBarImageView
}
我在 imageView 上设置图像的位置:
func didSelect(image: UIImage?) {
self.imgView.image = image
self.global.uploadFile(imageView: self.uploadIcon.imageView!)
}
在我添加子视图的地方:
override func viewDidLoad() {
super.viewDidLoad()
currentState = 0
imgView.translatesAutoresizingMaskIntoConstraints = false
topLabel.translatesAutoresizingMaskIntoConstraints = false
inputBox.translatesAutoresizingMaskIntoConstraints = false
btn.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(imgView)
view.addSubview(topLabel)
view.addSubview(inputBox)
view.addSubview(btn)
inputBox.addTarget(self, action: #selector(inputBoxClicked(textField:)), for: .touchDown)
imagePicker = ImagePicker(presentationController: self, delegate: self)
viewModel.state = currentState
inputBox.delegate = self
setupLayout()
}
这是抛出的错误:
2019-06-12 13:22:16.635903-0600 bZa[39792:1836482] *** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法使用锚激活约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。
解决方案
目前的问题是您在没有评论祖先的视图之间添加约束,因此请验证您添加
view.addSubview(imgView)
view.addSubview(topLabel)
view.addSubview(inputBox)
view.addSubview(btn)
也不要忘记
imgView.translatesAutoresizingMaskIntoConstraints = false
topLabel.translatesAutoresizingMaskIntoConstraints = false
inputBox.translatesAutoresizingMaskIntoConstraints = false
btn.translatesAutoresizingMaskIntoConstraints = false
推荐阅读
- autodesk-forge - Autodesk Forge/BIM 360 更新版本
- python - Buildozer 很长的导入语句导致加载模块失败
- electron - 我可以在 Electron 应用程序中使用最新的 HTML/CSS/JS 吗?
- python - 有没有办法让 python 自动查看我在终端中打印出来的一些文本以查找该文本中的关键字?
- java - 使用 Java 和 Snowflake,如何在准备好的语句中使用 queryId 进行查询?
- node.js - Mongoose + MongoDB 可以查询所有父集合吗?
- xml - 使用 XPath 查询读取文件 XML
- javascript - 为什么“\”在 JavaScript 中无效?
- c# - Asp.net 核心使用 MQTT / IMAP 等持久连接
- node.js - 节点 JS:TypeError:无法解构“未定义”或“空”的属性“access_token”