2013-08-18 8 views
3

我想補充的是居住在其他兩個相關的觀點相同父視圖的視圖。自動佈局,程序性VS界面構建

self.vDist = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 42, 21)]; 
[self.vDist setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.view addSubview:self.vDist]; 
NSLayoutConstraint *lc; 
lc = [NSLayoutConstraint constraintWithItem:self.vDist attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:20.0]; 
[self.view addConstraint:lc]; 
lc = [NSLayoutConstraint constraintWithItem:self.vDist attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20.0]; 
[self.view addConstraint:lc]; 

然後,我在任何設備取向上創建頂

/*********************** video view */ 
self.videoView = [[UIView alloc] initWithFrame:CGRectMake(90, 20, 140, 140)]; 
[self.videoView setBackgroundColor:[UIColor greenColor]]; 
[self.videoView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.view addSubview:self.videoView]; 

// width & height constraints, as UIViews don't have intrinsic constraints 

lc = [NSLayoutConstraint constraintWithItem:self.videoView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:140.0]; 
[self.videoView addConstraint:lc]; 
lc = [NSLayoutConstraint constraintWithItem:self.videoView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:140.0]; 
[self.videoView addConstraint:lc]; 

// center constraint 

lc = [NSLayoutConstraint constraintWithItem:self.videoView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]; 
[self.view addConstraint:lc]; 

// top constraint with its parent view 

lc = [NSLayoutConstraint constraintWithItem:self.videoView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:20.0]; 
[self.view addConstraint:lc]; 

這平方視圖小平方視圖顯示OK現在

創建屏幕的下部的第二視圖。這真的是我創建了一個約束每個尺寸屬性

/*********************** listado view */ 
self.listadoView = [[UIView alloc] initWithFrame:CGRectMake(5, 248, 310, 100)]; 
[self.listadoView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.listadoView setBackgroundColor:[UIColor whiteColor]]; 
[self.view addSubview:self.listadoView]; 

// height and width constraints as UIView don't have intrinsic constraints 

lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:310]; 
[self.listadoView addConstraint:lc]; 
lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:300]; 

// make it weak to be able to squeeze contents 

lc.priority = 250; 
[self.listadoView addConstraint:lc]; 

// top with videoView's bottom 

lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationLessThanOrEqual toItem:self.videoView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:88.0]; 
[self.view addConstraint:lc]; 

// top with parent's view top 

lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:248.0]; 
[self.view addConstraint:lc]; 

// center constraint 

lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]; 
[self.view addConstraint:lc]; 

試圖在這裏複製什麼IB確實與其他視圖

lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:5]; 
[self.view addConstraint:lc]; 
lc = [NSLayoutConstraint constraintWithItem:self.listadoView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:10]; 
[self.view addConstraint:lc]; 

碲導致屏幕是約束並不重要在這裏它的尺寸下面是綠色的正方形。垂直綠屏顯示我所期待的(見黃色圖像下方向下),但是在綠色的水平,你可以看到,listadoView的底邊是屏幕的邊緣下方,即使我設置的所有IB爲黃色設置了約束條件,以及我爲黃色設置的約束條件。

如何設置的約束有什麼建議?......也許它們被創造了的東西,用它做?因爲有些時候我刪除一個約束,它的工作,然後我重新添加的順序這種約束,仍然工作!再次運用所有約束,然後停止工作(什麼?!)。並且很難成功地複製它以提交錯誤,但它發生了。

我iOS5.1和6 x下和iOS6.1下xcode的5測試XCode中4.6此代碼。

constraints settings in IB yellow vertical yellow horizontal green vertical green horizontal

回答

0

發現我的錯誤。我設置listadoView的底部約束與其父視圖是10,也就是+10,並且它應該是-10。有了這個,界面顯示爲與其他.xib(黃色方塊)。

相關問題