web-dev-qa-db-ja.com

Autolayoutを使用して、既存のUIViewの上にUIViewをプログラムで中央に配置するにはどうすればよいですか?

Foursquareのチェックインが成功した場合、私のiPhoneアプリは、表示されているビューの上にビューを追加します。

ビューをXとYの中央に配置し、自動レイアウトを使用して幅と高さを明確にしたいのですが、プログラムで追加する制約がわかりません。 Storyboardでそれを行う方法は知っていますが、アプリで成功したアクションに応答してこのビューが後で追加されるのと同じように、コードに正確に入力するものがわかりません。

私はそれを適切に動作させることができず、UIViewにはloadNibNamed:でロードするnibがあります。

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

[self.ownerVC.view addSubview:successfulCheckInView];
31

これを試して:

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];

Swift用に更新:

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
75
Eric