什麼時候調用imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect,也是調用時機。首先梳理清楚幾個佈局順序: ...
UIButton的佈局順序細節
什麼時候調用imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect,也是調用時機。首先梳理清楚幾個佈局的規則:
- 改變view的size會觸發layoutSubviews
- 改變view的x或y不會觸發layoutSubviews
- 改變subview的size會觸發superview的layoutSubviews
- 改變subview的x或y不會觸發自己以及父視圖的layoutSubviews
記住這幾個佈局時的調用順序:
- layoutSubviews
- backgroundRectForBounds:
- contentRectForBounds:
- imageRectForContentRect:
- titleRectForContentRect:
特別的:
- 在UIButton初始化階段會依次調用contentRectForBounds:,imageRectForContentRect:。這是在佈局之前完成的。
- 改變title,image,background image都會來到進行綠色文字順序的佈局。但不會觸發父視圖的佈局,因為UIButton的尺寸未變。
- 綠色文字區域的調用並不是一次完成。而是複雜的多次調用完成的。它的順序是:3 -> 4 -> 3 -> 5 -> 3 -> 4
轉註出:https://www.cnblogs.com/xiaobajiu/p/11774496.html