2016-06-02 9 views
1

I 2 Ansichten mit gleichen X hinzufügen versuchen, Y. Sie haben Raum vom Rande mit addConstraints:[NSLayoutConstraint constraintsWithVisualFormat...]Wie zwei Ansichten mit Einschränkungen aufeinander hinzufügen

Ich habe versucht, die Saiten "H:|20-[A][B]-20-[C]-20-[D]-20|" und V:|20-[A][B]-20-[C]-20-[D]-20| und centreX == CenterX und centerY==centerY , aber sie widersprachen sich weiter und dachten, dass A und B nebeneinander sein sollten.

A ist ausgeblendet, und bei einem Klick auf die Schaltfläche wird B ausgeblendet und A wird angezeigt.

+0

Möchten Sie, dass sich die beiden Ansichten überlappen? – BangOperator

Antwort

0

Hinzufügen Ansichten mit gleichem Mittelpunkt X, Y Sie müssen zuerst eine der Ansicht platzieren sagen bView (Ansicht von unten), constatins

NSArray * bVerticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-20-[bView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bView)]; 
    NSArray * bHorizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[bView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bView)]; 

Dies bringt die bView in der Superview mit 20 als Kante mit Offset .

Platzieren Sie nun das tView (Draufsicht) mit derselben Mitte wie bView. Hier Selbst ist die Super von bView und TView

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[bView]-(<=1)-[tView]" options:NSLayoutFormatAlignAllCenterX metrics:nil views:NSDictionaryOfVariableBindings(bView,tView)]]; 
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[bView]-(<=1)-[tView]" options:NSLayoutFormatAlignAllCenterY metrics:nil views:NSDictionaryOfVariableBindings(bView,tView)]]; 

dann mit den Kanten von TView Pin gewünschten Offset sagen 40

NSArray * tVerticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-40-[tView]-40-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tView)]; 
    NSArray * tHorizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[tView]-40-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tView)]; 

EDIT:

Hier ist, wie es zu tun.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    bView = [UIView new]; 
    bView.backgroundColor = [UIColor redColor]; 
    bView.translatesAutoresizingMaskIntoConstraints = NO; 

    tView = [UIView new]; 
    tView.backgroundColor = [UIColor blackColor]; 
    tView.translatesAutoresizingMaskIntoConstraints = NO; 

    // Firdt bView is added then tView hence tView is exaclty above the bView. 
    [self.view addSubview:bView]; 
    [self.view addSubview:tView]; 


    // Edges Constrints for bView 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-20-[bView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bView)]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[bView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bView)]]; 

    // Edges Constints for tView 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-20-[tView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tView)]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[tView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tView)]]; 

    // Centring for bView and tView 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[bView]-(<=1)-[tView]" options:NSLayoutFormatAlignAllCenterX metrics:nil views:NSDictionaryOfVariableBindings(bView,tView)]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[bView]-(<=1)-[tView]" options:NSLayoutFormatAlignAllCenterY metrics:nil views:NSDictionaryOfVariableBindings(bView,tView)]]; 

} 

-(IBAction)toggleViews:(id)sender { 
    NSArray * subViews = self.view.subviews; 
    [self.view exchangeSubviewAtIndex:[subViews indexOfObject:tView] withSubviewAtIndex:[subViews indexOfObject:bView]]; 
} 
+0

es sieht nicht so aus, als ob es funktioniert, ich habe meine Frage bearbeitet, um mich selbst klarer zu machen, in deinem Fall, ich will viewT wird zuerst versteckt, und irgendwann wird viewB gezeigt werden – shd

+0

@shd Also wollen Sie A zunächst dann auf einigen Knopf klicken B (mit gleicher Größe und Position wie A) ersetzt optisch A? – BangOperator

+0

ja genau ..... – shd

Verwandte Themen