重點!重點!重點! 復制控件時,只會保留對自身的約束,其它的如與其它控件或父控件的約束會被刪除。
一、添加xib
(單個創建控制器的xib)
1.當控制器已經創建下單獨創建xib(為控制器單獨創建xib)
1、單獨創建xib,名字要和控制器名字一樣。 2、設置xib的控制器類為當前控制器。 3、給當前控制器view拖線為當前xib。 4、如下圖:


(單個創建View的xib)
1、名字和創建的類一致。
2、view的class是創建的那個view類(這個控制器的區別,控制器是設置File's Owner的class有類型是(NSObject),而view是設置view的class引用類(類型是UIView))。
3、加載xib
+ (instancetype)loadXib{
return [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil].lastObject
}
4、凡是用UIView創建的xib先設置xib的view的class是當前view
二、設置約束
1、label
1、label添加約束可以只設置x,y就可以定位label。 2、在xib或storyBoard中換行的快捷鍵option+回車。 3、xib的使用,多行label的約束,不要約束高度,父視圖約束下面labelbottom間距為0或一定間距就可,高度是label最高的高度。
2、UIImageView或其它控件都可以
按住control 滑動鼠標拖線,為自身添加約束,保證無論放多大都不會變形

3、給兩個相鄰的控件快速設置約束(如左對齊、右對齊,垂直居中,水平居中,等寬、等高,注意必須是上下)

4、復制控件時,除本身之外的約束會被去掉。


1).uiimageView 和按鈕比較特殊,可以只設置其x,y就可以。
2).可以設置其絲例,如1:1,或者當前圖片的比例,這樣保證不會變形,設置比例在自身上點擊control拉個線,選擇
3).在右側就可以根據需求改變比例。
5、設置幾個相鄰控件時,需要注意如下:
1、首先可以先固定一個控件如中心居中然后設置好y和height后。 2、設置第一個控件左邊間距為0,右邊間距為0(針對了中間那個控件)。 3、設置中間控件右邊間距為0(針對於最右邊的控件)。 4、設置最右邊的控件右邊間距為0. 5、最后設置所有的控件等寬、等高、頂部間距一致即可。
6、如下結果:

6、綜合約束
最終結果:


1、剛開始進來的是登錄,然后點擊注冊賬號切換為注冊,並且文字變成已有賬號?(有一個動畫,因為兩個頁面差不多)
2、首先先約束登錄視圖,添加一個登錄的view視圖設置左間距為0,居中,設置高度(先這樣設置),再設置與父視圖(self.view)等寬(為之后方便注冊視圖切換做准備,不能設置右邊對齊注意)。
3、設置textField時需要注意,根據ui來看,應該是無邊框的,后面是個圖片,所以設置無邊框,且設置左邊,右邊,寬度和高度與背影一致(然后再通過高度約束改為0.5,因為要放兩個textField,注意可以把textField拖到下面或右邊左邊來設置頂部,左右,寬高一致)。
4、其它像按鈕可以只設置左或右對齊,頂部的間距即可,最后一個控件設置bottom與父視圖為0(這樣就可以刪除之前登錄視圖自定義的那個高度了)。
5、重點!重點!重點! 因為登錄和注冊視圖幾乎一致,選中登錄視圖,control+c,然后control+v,復制過來后,需要設置注冊視圖的約束(因為復制的控件只保留自身的約束,與其它控件或父控件的約束會被刪除),設置它的左、頂部,寬高與登錄視圖一致。
6、然后把登錄視圖的右邊設置為注冊的左邊(雙擊左邊間距對齊的那個約束就可以設置),這樣注冊視圖剛進來就看不見了。
7、把登錄視圖左邊間距(注意是登錄視圖左邊間距,不是登錄視圖右邊間距與注冊視圖左邊間距為0的那個約束)拖線設置為屬性,通過點擊注冊帳號來設置約束的值 。
8、點擊注冊帳號實現設置約束的值和動畫(也就是立即更新約束)
if (self.leftConstraint.constant) {//不為0是注冊視圖
self.leftConstraint.constant = 0;
[sender setTitle:@"注冊賬號" forState:UIControlStateNormal];
}else{//這個約束等於0,是登錄視圖
self.leftConstraint.constant = -self.view.sth_width;
[sender setTitle:@"已有賬號?" forState:UIControlStateNormal];
}
[UIView animateWithDuration:0.25 animations:^{
[self.view layoutIfNeeded]; //強制更新約束,也是立即更新約束
}];
