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

Elydasian
  • 2,016
  • 5
  • 23
  • 41
Krish
  • 4,166
  • 11
  • 58
  • 110
  • 1
    you may try a wrapper https://github.com/robb/Cartography – Shoaib Sep 04 '15 at 06:47
  • possible duplicate of [Creating layout constraints programmatically](http://stackoverflow.com/questions/12826878/creating-layout-constraints-programmatically) – Sabrican Ozan Sep 04 '15 at 07:30

1 Answers1

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]];
Leo
  • 24,596
  • 11
  • 71
  • 92