Подтвердить что ты не робот

Как я могу централизовать UIView программно поверх существующего UIView, используя Autolayout?

В случае успешной проверки Foursquare мое приложение iPhone добавляет представление поверх отображаемого представления.

Я хочу, чтобы представление было сосредоточено на X и Y и для него имела определенную ширину и высоту, используя автозапуск, но я не уверен, какие ограничения добавить программно. Я знаю, как это сделать в Storyboard, но я не уверен, что именно вводить код, чтобы сделать то же самое, что и это представление, добавляется позже в ответ на успешное действие в приложении.

Я не могу заставить его работать правильно, а 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];
4b9b3361

Ответ 1

Попробуйте следующее:

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