1.masonry這個(gè)布局是比較知名的,使用block的鏈?zhǔn)骄幊虂聿季执_實(shí)酷炫,但是實(shí)際使用過程中確實(shí)遇到不少問題
2.于是在github上搜索到另外一個(gè)較出名的布局,便有了這段pureLayout的嘗試
3.布局的問題通常出在給scrollView上的控件或者tableView上的控件設(shè)限制上,以及在iOS8正常運(yùn)行,在iOS7上卻頻頻崩潰,自動(dòng)布局還是得自己多做嘗試;

Paste_Image.png

Paste_Image.png
相對于masonry來說,我覺得pureLayout的可讀性更強(qiáng)(個(gè)人觀點(diǎn))
....
許久沒來更新了,接著寫完這pureLayout的布局。
便捷的讓一個(gè)子視圖布局充滿父視圖:

Paste_Image.png
然后設(shè)置其中不同控件相對布局的方法:

Paste_Image.png
像這樣居中,設(shè)置大小,sizetofit,邊界等。
pureLayout的好處在于,這些設(shè)定限制的語句都是有返回值的,我們可以很方便的拿到我們想要改動(dòng)的那個(gè)約束,然后在特定的事件下去修改約束。
看到有人問到tableviewHeaderView的問題。
分兩種:第一種是代理方法返回的tableviewHeader:
這種是可以使用pureLayou布局并在header中的layoutsubViews去布局子空間的。

Paste_Image.png

Paste_Image.png
從代理方法中返回就可以了。
第二種是tableView的tableViewHeaderView,因?yàn)槭侵苯咏o與賦值的,我的做法是自定義布局好的UIView之后,會(huì)在這個(gè)自定義的view的willMoveToSuperView中去設(shè)置frame。

Paste_Image.png
//我們像這樣使用pureLayout布局UI:
[tableView autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsMake(0, 0, 0, 0) excludingEdge:ALEdgeBottom];
[tableView autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:81];
//當(dāng)想要改動(dòng)其中的約束的時(shí)候,在布局的時(shí)候就拿到這條約束
self.tableViewBottomConstraint = [tableView autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:81];
//然后在需要改動(dòng)的地方改動(dòng)這個(gè)限制就好了,然后加一個(gè)自帶的動(dòng)畫效果就好了:
- (void)keyboardWillHide:(NSNotification*)aNotification {
self.tableViewBottomConstraint.constant = -81;
[UIView animateWithDuration:0.25
animations:^{
[self.tableView layoutIfNeeded];
}];
}