2013-08-28 10 views
30

フォースクエアのチェックインが成功した場合、私のiPhoneアプリは、表示されているビューの上にビューを追加します。Autolayoutを使用して既存のUIViewの上にプログラム上でUIViewを中央に配置するにはどうすればよいですか?

私はビューをXとYの中央に配置し、幅と高さを明確にするにはautolayoutを使用しますが、プログラムで追加する制約は不明です。私はストーリーボードでそれを行う方法を知っていますが、このビューと同じことをするためにコードを入力するのは、アプリケーションの成功したアクションに応じて後で追加されます。

正しく動作することができず、UIViewにはloadNibNamed:でロードされたペン先があります。

SuccessView *successfulCheckInView = [[SuccessView alloc] initWithFrame:CGRectZero]; 
successfulCheckInView.placeNameLabel.text = properVenue.name; 
successfulCheckInView.placeAddressLabel.text = properVenue.address; 
successfulCheckInView.delegate = self; 

[self.ownerVC.view addSubview:successfulCheckInView]; 
+0

正確にあなたがする方法を知りませんか? constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant :?を使用しようとしましたか? – rdelmar

答えて

74

これを試してみてください:

NSLayoutConstraint *xCenterConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; 
[superview addConstraint:xCenterConstraint]; 

NSLayoutConstraint *yCenterConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]; 
[superview addConstraint:yCenterConstraint]; 

はスウィフトのため更新:

NSLayoutConstraint(item: view1, attribute: .centerX, relatedBy: .equal, toItem: view2, attribute: .centerX, multiplier: 1, constant: 0).isActive = true 

NSLayoutConstraint(item: view1, attribute: .centerY, relatedBy: .equal, toItem: view2, attribute: .centerY, multiplier: 1, constant: 0).isActive = true 
+1

view1とview2は何ですか? – Lucas

+3

ビューの中心を整列させているだけの場合、関係の順序は関係ありません。 'view1'と' view2'はあなたが整列させているビューだけです。 – Eric

+0

注文が問題にならない場合は、どうすれば確認できますか? view1の再配置は、view2の中心になるように再配置されます。 –

関連する問題