今天在使用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:系統更新約束
