简体   繁体   中英

how can we set horizontal space between two views using autolayouts programatically(using constraintWithItem model formate)

Hi i am beginner in ios in my application i want add two UIviews programatically using auto-layouts(constraintWithItem model) but horizental space is not setting b/w this two view according to my code screen is coming like first screen

My code is below

 //Applying autolayouts for myview1
        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myview1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]];

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myview1 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myview1 attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:0.0f]];

        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myview1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];

       // Applying autolayouts for myview2

        NSDictionary * views = NSDictionaryOfVariableBindings(myview2,myview3);


        [myview1 addConstraint:[NSLayoutConstraint constraintWithItem:myview2 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f]];

        [myview1 addConstraint:[NSLayoutConstraint constraintWithItem:myview2 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:myview1 attribute:NSLayoutAttributeLeading multiplier:1.0f constant:10.0f]];

   [myview1 addConstraint:[NSLayoutConstraint constraintWithItem:myview2 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:myview1 attribute:NSLayoutAttributeTop multiplier:1.0f constant:80.0f]];


        NSArray * horizontalConstraintsforbuttons = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myview2]-10-[myview3]-|" options:0 metrics:nil views:views];

        [myview1 addConstraints:horizontalConstraintsforbuttons];

       // Applying autolayouts for myview3

        [myview1 addConstraint:[NSLayoutConstraint constraintWithItem:myview3 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f]];

        [myview1 addConstraint:[NSLayoutConstraint constraintWithItem:myview3 attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:myview1 attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:-10.0f]];

        [myview1 addConstraint:[NSLayoutConstraint constraintWithItem:myview3 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:myview1 attribute:NSLayoutAttributeTop multiplier:1.0f constant:80.0f]];

在此处输入图片说明

but i want to get result like second screen please help me some one

在此处输入图片说明

2 errors here:

1) You are adding 2 leading constraints to view 2 and 2 trailing constraints to view 3. One comes from a line of code ("NSLayoutAttributeLeading" etc) and the second from the visual format

2) You're not telling auto layout in any way how to set the width for myview2 and myview3. So one view gets all the available width and the other 0.

You can fix both problems by changing

    NSArray * horizontalConstraintsforbuttons = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myview2]-10-[myview3]-|" options:0 metrics:nil views:views];

to

NSArray * horizontalConstraintsforbuttons = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[myview2(==myview3)]-10-[myview3]" options:0 metrics:nil views:views];

This gets rid of the extra leading and trailing constraints and tells auto layout that the width of myview2 and myview3 should be equal.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM