subview自适应superview的frame autosizingMask(转)
自動尺寸調整行為
當您改變視圖的邊框矩形時,其內嵌子視圖的位置和尺寸往往也需要改變,以適應原始視圖的新尺寸。如果視圖的autoresizesSubviews屬性聲明被設置為YES,則其子視圖會根據autoresizingMask屬性的值自動進行尺寸調整。簡單配置一下視圖的自動尺寸調整掩碼常常就能使應用程序得到合適的行為;否則,應用程序就必須通過重載layoutSubviews方法來提供自己的實現。
設置視圖的自動尺寸調整行為的方法是通過位OR操作符將期望的自動尺寸調整常量連結起來,并將結果賦值給視圖的autoresizingMask屬性。表2-1列舉了自動尺寸調整常量,并描述這些常量如何影響給定視圖的尺寸和位置。舉例來說,如果要使一個視圖和其父視圖左下角的相對位置保持不變,可以加入UIViewAutoresizingFlexibleRightMargin 和UIViewAutoresizingFlexibleTopMargin常量,并將結果賦值給autoresizingMask屬性。當同一個軸向有 多個部分被設置為可變時,尺寸調整的裕量會被平均分配到各個部分上。
| UIViewAutoresizingNone | 這個常量如果被設置,視圖將不進行自動尺寸調整。 |
| UIViewAutoresizingFlexibleHeight | 這個常量如果被設置,視圖的高度將和父視圖的高度一起成比例變化。否則,視圖的高度將保持不變。 |
| UIViewAutoresizingFlexibleWidth | 這個常量如果被設置,視圖的寬度將和父視圖的寬度一起成比例變化。否則,視圖的寬度將保持不變。 |
| UIViewAutoresizingFlexibleLeftMargin | 這個常量如果被設置,視圖的左邊界將隨著父視圖寬度的變化而按比例進行調整。否則,視圖和其父視圖的左邊界的相對位置將保持不變。 |
| UIViewAutoresizingFlexibleRightMargin | 這個常量如果被設置,視圖的右邊界將隨著父視圖寬度的變化而按比例進行調整。否則,視圖和其父視圖的右邊界的相對位置將保持不變。 |
| UIViewAutoresizingFlexibleBottomMargin | 這個常量如果被設置,視圖的底邊界將隨著父視圖高度的變化而按比例進行調整。否則,視圖和其父視圖的底邊界的相對位置將保持不變。 |
| UIViewAutoresizingFlexibleTopMargin | 這個常量如果被設置,視圖的上邊界將隨著父視圖高度的變化而按比例進行調整。否則,視圖和其父視圖的上邊界的相對位置將保持不變。 |
?
如 果您通過Interface Builder配置視圖,則可以用Size查看器的Autosizing控制來設置每個視圖的自動尺寸調整行為。上圖中的靈活寬度及高度常量和 Interface Builder中位于同樣位置的彈簧具有同樣的行為,但是空白常量的行為則是正好相反。換句話說,如果要將靈活右空白的自動尺寸調整行為應用到 Interface Builder的某個視圖,必須使相應方向空間的Autosizing控制為空,而不是放置一個支柱。幸運的是,Interface Builder通過動畫顯示了您的修改對視圖自動尺寸調整行為的影響。
如果視圖的autoresizesSubviews屬性被設置為 NO,則該視圖的直接子視圖的所有自動尺寸調整行為將被忽略。類似地,如果一個子視圖的自動尺寸調整掩碼被設置為 UIViewAutoresizingNone,則該子視圖的尺寸將不會被調整,因而其直接子視圖的尺寸也不會被調整。
請注意:為了使自動尺寸調整的行為正確,視圖的transform屬性必須設置為恒等變換;其它變換下的尺寸自動調整行為是未定義的。
自動尺寸調整行為可以適合一些布局的要求,但是如果您希望更多地控制視圖的布局,可以在適當的視圖類中重載layoutSubviews方法。轉載于:https://www.cnblogs.com/lzjsky/archive/2013/03/18/2966316.html
總結
以上是生活随笔為你收集整理的subview自适应superview的frame autosizingMask(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: case 语句不跳转,死循环
- 下一篇: 【转】svn的安装及与redmine的整