今天在使用masnory寫了一個列表,發現了一個問題。那就是在使用masonry設置view後發現,設置任意角的圓角不起做用。函數
這是由於在使用了masonry以後,view的fream和bounds都是0,因此在設置圓角就不會起做用。佈局
解決方法:
當設置完控件的約束,須要調用layoutIfNeeded 函數進行佈局,而後所約束的控件纔會按照約束條件,生成當前佈局相應的frame和bounds。這樣就能夠利用這兩個屬性來進行圖片圓角剪裁
[self layoutIfNeeded];//這句代碼很重要,不能忘了 [self useBezierPathClipCornerWithType:UILayoutCornerRadiusTop WithCornerRadius:AdaptedWidth(5)];
下面附上關於autolayout更新幾個方法的區別:動畫
setNeedsLayout:告知頁面須要更新,可是不會馬上開始更新。執行後會馬上調用layoutSubviews。
layoutIfNeeded:告知頁面佈局馬上更新。因此通常都會和setNeedsLayout一塊兒使用。若是但願馬上生成新的frame須要調用此方法,利用這點通常佈局動畫能夠在更新佈局後直接使用這個方法讓動畫生效。
layoutSubviews:系統重寫佈局
setNeedsUpdateConstraints:告知須要更新約束,可是不會馬上開始
updateConstraintsIfNeeded:告知馬上更新約束
updateConstraints:系統更新約束