如何使用Autolayout以编程方式将UIView置于现有UIView之上?

Ant*_*nko 31 iphone uiview ios autolayout

如果Foursquare签入成功,我的iPhone应用程序会在显示的视图顶部添加一个视图.

我希望视图以X和Y为中心,并且使用autolayout使其具有明确的宽度和高度,但我不确定以编程方式添加哪些约束.我知道如何在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];
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 75

试试这个:

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];
Run Code Online (Sandbox Code Playgroud)

更新为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
Run Code Online (Sandbox Code Playgroud)

  • 在我们只是调整视图中心的情况下,关系的顺序无关紧要.`view1`和`view2`只是你正在调整的不同视图. (3认同)
  • 不要忘记哦,很容易忘记view1.translatesAutoresizingMaskIntoConstraints = false (2认同)