0

Hi I am trying to add UIViews programmatically using Auto Layout.

Here my main requirement is that I want to set the firstView(i.e myView1) trailing space to "30" and I want to set the second view (i.e myView2) to 30 distance from first view like image below.

For this I have written some code (using visual format and constraint with item format) but this is not working.

Code:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    UIView *myView1 = [[UIView alloc] init];
    myView1.backgroundColor = [UIColor redColor];
    myView1.translatesAutoresizingMaskIntoConstraints = NO;  
    [self.view addSubview:myView1];

    UIView *myView2 = [[UIView alloc] init];
    myView2.backgroundColor = [UIColor orangeColor];
    myView2.translatesAutoresizingMaskIntoConstraints = NO;  
    [self.view addSubview:myView2];


    [self.view addConstraints:[NSLayoutConstraint
                               constraintsWithVisualFormat:@"V:|-[myView1(==50)]-50-|"
                               options:0
                               metrics:nil
                               views:NSDictionaryOfVariableBindings(myView1)]];

    [self.view addConstraints:[NSLayoutConstraint
                               constraintsWithVisualFormat:@"V:|-[myView2(==50)]-50-|"
                               options:0
                               metrics:nil
                               views:NSDictionaryOfVariableBindings(myView2)]];

//Constraints with item formate
            NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:myView1 attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:-30.f];
            [self.view addConstraint:constraint];

            constraint = [NSLayoutConstraint constraintWithItem:myView1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f];
            [self.view addConstraint:constraint];

           NSLayoutConstraint*constraint1 = [NSLayoutConstraint constraintWithItem:myView2 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:myView1 attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:-30.f];
          [self.view addConstraint:constraint1];

           constraint1 = [NSLayoutConstraint constraintWithItem:myView2 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f];
          [self.view addConstraint:constraint1];


//Constraints with visual formate
  [self.view addConstraints:[NSLayoutConstraint
                               constraintsWithVisualFormat:@"H:|-[myView1(==50)]-20-[myView(==50)]-30-|"
                               options:0
                               metrics:nil
                               views:NSDictionaryOfVariableBindings(myView1,myView2)]];

}

enter image description here

2

1 Answer 1

3

Screenshot

And code with Visual Formatter language

UIView *myView1 = [[UIView alloc] init];
myView1.backgroundColor = [UIColor redColor];
myView1.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:myView1];

UIView *myView2 = [[UIView alloc] init];
myView2.backgroundColor = [UIColor orangeColor];
myView2.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:myView2];

NSDictionary * viewsDic = NSDictionaryOfVariableBindings(myView1,myView2);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[myView1(50)]-30-[myView2(50)]-30-|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDic]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[myView1(50)]-30-|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDic]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[myView2(50)]-30-|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDic]];

Update,code in item format

UIView *myView1 = [[UIView alloc] init];
myView1.backgroundColor = [UIColor redColor];
myView1.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:myView1];

UIView *myView2 = [[UIView alloc] init];
myView2.backgroundColor = [UIColor orangeColor];
myView2.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:myView2];

//View2.width=50
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                      attribute:NSLayoutAttributeWidth
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:nil
                                                      attribute:0
                                                     multiplier:1.0
                                                       constant:50]];
//View2.height=50
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                      attribute:NSLayoutAttributeHeight
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:nil
                                                      attribute:0
                                                     multiplier:1.0
                                                       constant:50]];
//View2.traling = self.traling - 30
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                      attribute:NSLayoutAttributeTrailing
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeTrailing
                                                     multiplier:1.0
                                                       constant:-30]];

//View2.bottom = self.bottom - 30
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                      attribute:NSLayoutAttributeBottom
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeBottom
                                                     multiplier:1.0
                                                       constant:-30]];

//View1.width = 50
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                      attribute:NSLayoutAttributeWidth
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:nil
                                                      attribute:0
                                                     multiplier:1.0
                                                       constant:50]];
//View1.height=50
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                      attribute:NSLayoutAttributeHeight
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:nil
                                                      attribute:0
                                                     multiplier:1.0
                                                       constant:50]];

//View1.traling = View2.leading - 30
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                      attribute:NSLayoutAttributeTrailing
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:myView2
                                                      attribute:NSLayoutAttributeLeading
                                                     multiplier:1.0
                                                       constant:-30]];
//View1.bottom = self.bottom - 30
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                      attribute:NSLayoutAttributeBottom
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeBottom
                                                     multiplier:1.0
                                                       constant:-30]];
Sign up to request clarification or add additional context in comments.

2 Comments

yes your right but i want this answer in constarint with item formate
@Krish See,what I update.I suggest to use visual format language.It is short and clear

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.