Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to activate constraint with anchors

So, I'm trying to create a sceneView programatically

class ViewController: UIViewController, ARSCNViewDelegate {     var sceneView: ARSCNView = ARSCNView()     let configuration = ARWorldTrackingConfiguration()          override func viewDidLoad() {         super.viewDidLoad()                  self.sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints, ARSCNDebugOptions.showWorldOrigin]         self.configuration.planeDetection = .horizontal         self.sceneView.session.run(configuration)         self.sceneView.delegate = self         self.sceneView.autoenablesDefaultLighting = true                  //add autolayout contstraints         self.sceneView.translatesAutoresizingMaskIntoConstraints = false         self.sceneView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true         self.sceneView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true         self.sceneView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true         self.sceneView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true      }          func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {         guard anchor is ARPlaneAnchor else {return}     } } 

But I get this error message:

Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors <NSLayoutYAxisAnchor:0x1c0278700 "ARSCNView:0x10690d7e0.top"> and <NSLayoutYAxisAnchor:0x1c426db40 "UIView:0x106b14e30.top"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'

It's happens in the part \\add autolayout contstraints. How can I add constraints to that element?

like image 689
utiq Avatar asked Nov 07 '17 21:11

utiq


1 Answers

dan is right, you need to add sceneView as a subview before you can anchor it. Try something like this:

view.addSubview(sceneView) sceneView.anchor(top: self.view.topAnchor, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0) 
like image 63
Thomas Wang Avatar answered Sep 19 '22 06:09

Thomas Wang