2015-09-04 80 views
0

嗨,我想以編程方式使用添加UIViews自動佈局。 在這裏我的主要要求是我想設置firstView(即myView1)尾部空間是「30」,我想設置第二個視圖(即myView2)是從第一個視圖30像下面的距離。如何以編程方式使用自動佈局以編程方式添加UIviews

爲此,我編寫了一些代碼(使用視覺格式和約束項目格式),但這是行不通的。

代碼:

- (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

+1

,你可以嘗試的包裝https://github.com/robb/Cartography – Shoaib

+0

的[創建佈局編程限制(可能重複http://stackoverflow.com/問題/ 12826878 /創建佈局約束 - 以編程方式) –

回答

3

截圖

而且具有視覺格式化語言代碼

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

更新,在項目格式代碼

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

是的你的權利,但我想要這個答案在與項目犯人constarint – Krish

+0

@克里希看到,我更新。我建議使用視覺格式的語言。它是短小而清晰 – Leo

相關問題