2013-08-28 9 views
30

W przypadku pomyślnego sprawdzenia Foursquare, moja aplikacja na telefonie iPhone dodaje widok ponad wyświetlanym widokiem.Jak programowo wyśrodkować UIView na istniejącym UIView przy użyciu Autolayout?

Chcę, aby widok był wyśrodkowany na X i Y oraz aby miał określoną szerokość i wysokość przy użyciu autolayout, ale nie jestem pewien, które ograniczenia dodać programowo. Wiem, jak to zrobić w Storyboard, ale nie jestem pewien, co dokładnie wpisać w kod, aby zrobić to samo, co ten widok jest dodawany później w odpowiedzi na udane działanie w aplikacji.

Nie mogę uzyskać działającego poprawnie, a UIView ma stalówkę, którą ładuje z 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

Co dokładnie nie wiesz jak to zrobić? Czy próbowałeś użyć constraintWithItem: atrybut: relatedBy: toItem: atrybut: multipiplier: constant :? – rdelmar

Odpowiedz

74

Spróbuj tego:

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

Aktualizacja dla 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 
+1

jaki jest view1 i view2? – Lucas

+3

Kolejność relacji nie ma znaczenia w przypadku, gdy tylko dopasowujemy centra widoków. 'view1' i' view2' to tylko różne widoki, które wyrównujesz. – Eric

+0

jeśli zamówienie nie ma znaczenia, w jaki sposób możemy się upewnić, np. view1 repozycje na środek z view2 vs. na odwrót? –