2017-05-21 8 views
-1

私はこのエラーを取得する:ボタンを押した結果である、その下のUIView誤動作

Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors and because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'

lazy var registerButton: UIButton = { 

    let rButton = UIButton(type: .system) 

    rButton.frame = CGRect(x: 210, y: 600, width: 100, height: 50) 

    rButton.setTitle("REGISTER", for: .normal) 
    rButton.backgroundColor = UIColor.white 
    rButton.translatesAutoresizingMaskIntoConstraints = false 
    rButton.setTitleColor(UIColor.black, for: .normal) 
    rButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20) 

    rButton.layer.cornerRadius = 20 
    rButton.layer.borderWidth = 2 

    rButton.addTarget(self, action: #selector(regSegue), for: .touchUpInside) 

    return rButton 
}() 

を参照してくださいコード(ボタン押下上記のコードはある):

func regSegue() { 
    let page = UIPageViewController() 
    present(page, animated: true, completion: nil) 
    page.view.backgroundColor = UIColor .white; 

    // let loginInputContainerView: UIView = UIView(frame: CGRect(x: 12, y: 225, width: 350, height: 200.00)); 

    let inputContainerView = UIView() 
    inputContainerView.backgroundColor = UIColor.blue 
    inputContainerView.layer.cornerRadius = 5 
    inputContainerView.layer.masksToBounds = true 
    inputContainerView.translatesAutoresizingMaskIntoConstraints = false 
    // need x,y,width,height 

    inputContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 

    inputContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true 

    inputContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true 

    inputContainerView.heightAnchor.constraint(equalToConstant: 150).isActive = true 

    page.view.addSubview(inputContainerView) 
} 

私は迷っています。

ここに追加する必要がありますか?

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    // will allow me to put a image as my UI background instead of a color 

    // will make sure background image scales to screen size 
    UIGraphicsBeginImageContext(self.view.frame.size) 
    UIImage(named: "BestBackground")?.draw(in: self.view.bounds) 
    // self is the screen we are working on 
    //view is there to specify the controller view or the view that the controller manages 
    //bounds describes the views location and size 

    if let image: UIImage = UIGraphicsGetImageFromCurrentImageContext(){ 
     UIGraphicsEndImageContext() 
     self.view.backgroundColor = UIColor(patternImage: image) 
    }else{ 
     // debugging incase image isnt found 
     UIGraphicsEndImageContext() 
     debugPrint("Image not available") 
    } 

    // will add subiviews to the screen 
    view.addSubview(loginButton) 
    view.addSubview(registerButton) 





} 

//will give you white status bar 
override var preferredStatusBarStyle: UIStatusBarStyle{ 
    return .lightContent 
} 

}

+0

[あなたの質問を削除してから再投稿](http://stackoverflow.com/questions/44092723/issue-with-uiview)しないでください。 –

+0

もう一度起こりません – HiDungLing

答えて

1

あなたがviewのビュー階層にinputContainerViewを追加していないので、あなたは、制約を有効にすることはできません。実際には、表示階層viewにはpage.viewを追加しないでください。 regSegueメソッドが戻ると、pageオブジェクトとそのビューは割り当て解除されます。

あなたがここで何をしようとしているのか正確にはわかりません。 view(おそらくサブビューはview)を含むビュー階層にpage.viewを追加し、inputContainerViewviewの間の制約をアクティブにする前に、サブビューとしてpage.viewとしてinputContainerViewを追加する必要があります。

または、このregSegueメソッドを呼び出してセグを実行すると、ページビューコントローラがセグの宛先になっている可能性があります。その場合、segueオブジェクトから宛先コントローラを取得する必要があります。ではなく、新しいコントローラを作成します。

+0

私の編集を参照してください – HiDungLing

+0

regSegueはsegueを実行し、ページビューコントローラはsegueの宛先です。どのように私はコントローラの宛先 – HiDungLing

+0

を得る方法は私はこれをすべてのプログラムを使用してストーリーボードを使用していない – HiDungLing

0

まず、inputContainerViewをサブビューとしてpage.viewに追加し、次に制約をアクティブにする必要があります。

+1

制約は 'page.view'ではないことに注意してください。彼らは「見る」べきものです。これは、 'inputContainerView'と' view'が制約をアクティブにする前に同じビュー階層になければならないことを意味します。 –

+0

私はしましたpage.view.addSubview(inputContainerView) – HiDungLing

+0

はい、あなたはしましたが、あなたは*ビューを含むビュー階層に 'page.view'を追加しなかった* '。 –