2013-08-28 21 views
30

In caso di un controllo Foursquare riuscito, l'app per iPhone mostra una vista sopra la vista mostrata.Come posso centrare un UIView a livello di codice sulla parte superiore di un UIView esistente utilizzando l'Autolayout?

Voglio che la vista sia centrata su X e Y e che abbia una larghezza e un'altezza definite utilizzando l'autolayout, ma non sono sicuro di quali restrizioni aggiungere a livello di codice. So come farlo in Storyboard, ma non sono sicuro di cosa esattamente digitare codice per fare lo stesso come questa vista viene aggiunta in seguito in risposta a un'azione di successo nell'app.

Non riesco a farlo funzionare correttamente e l'UIView ha un pennino che carica con 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

Che cosa esattamente non si sa come fare? Hai provato a usare constraintWithItem: attribute: relatedBy: toItem: attributo: moltiplicatore: costante :? – rdelmar

risposta

74

Prova questo:

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

Aggiornamento per 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

cosa sono view1 e view2? – Lucas

+3

L'ordine della relazione non ha importanza nel caso in cui stiamo semplicemente allineando i centri delle viste. 'view1' e' view2' sono solo le diverse viste che stai allineando. – Eric

+0

se l'ordine non ha importanza, come ci assicuriamo ad es. view1 riposizionamenti per essere al centro con view2 e viceversa? –

Problemi correlati