標籤:http os strong io for ar html line
當您改變視圖的邊框矩形時,其內嵌子視圖的位置和尺寸往往也需要改變,以適應原始視圖的新尺寸。如果視圖的autoresizesSubviews屬性聲明被設定為YES,則其子視圖會根據autoresizingMask屬性的值自動進行尺寸調整。簡單配置一下視圖的自動尺寸調整掩碼常常就能使應用程式得到合適的行為;否則,應用程式就必須通過重載layoutSubviews方法來提供自己的實現。
設定視圖的自動尺寸調整行為的方法是通過位OR操作符將期望的自動尺寸調整常量連結起來,並將結果賦值給視圖的autoresizingMask屬性。表2-1列舉了自動尺寸調整常量,並描述這些常量如何影響給定視圖的尺寸和位置。舉例來說,如果要使一個視圖和其父視圖左下角的相對位置保持不變,可以加入UIViewAutoresizingFlexibleRightMargin和UIViewAutoresizingFlexibleTopMargin常量,並將結果賦值給autoresizingMask屬性。當同一個軸向有多個部分被設定為可變時,尺寸調整的裕量會被平均分配到各個部分上。
UIViewAutoresizingNone
這個常量如果被設定,視圖將不進行自動尺寸調整。
UIViewAutoresizingFlexibleHeight
這個常量如果被設定,視圖的高度將和父視圖的高度一起成比例變化。否則,視圖的高度將保持不變。
UIViewAutoresizingFlexibleWidth
這個常量如果被設定,視圖的寬度將和父視圖的寬度一起成比例變化。否則,視圖的寬度將保持不變。
UIViewAutoresizingFlexibleLeftMargin
這個常量如果被設定,視圖的左邊界將隨著父視圖寬度的變化而按比例進行調整。否則,視圖和其父視圖的左邊界的相對位置將保持不變。
UIViewAutoresizingFlexibleRightMargin
這個常量如果被設定,視圖的右邊界將隨著父視圖寬度的變化而按比例進行調整。否則,視圖和其父視圖的右邊界的相對位置將保持不變。
UIViewAutoresizingFlexibleBottomMargin
這個常量如果被設定,視圖的底邊界將隨著父視圖高度的變化而按比例進行調整。否則,視圖和其父視圖的底邊界的相對位置將保持不變。
UIViewAutoresizingFlexibleTopMargin
這個常量如果被設定,視圖的上邊界將隨著父視圖高度的變化而按比例進行調整。否則,視圖和其父視圖的上邊界的相對位置將保持不變。
圖2-8為這些常量值的位置提供了一個圖形表示。如果這些常量之一被省略,則視圖在相應方向上的布局就被固定;如果某個常量被包含在掩碼中,在該方向的視圖布局就就靈活的。
圖2-8 視圖的自動尺寸調整掩碼常量
如果您通過Interface Builder配置視圖,則可以用Size查看器的Autosizing控制來設定每個視圖的自動尺寸調整行為。中的靈活寬度及高度常量和Interface Builder中位於同樣位置的彈簧具有同樣的行為,但是空白常量的行為則是正好相反。換句話說,如果要將靈活右空白的自動尺寸調整行為應用到Interface Builder的某個視圖,必須使相應方向空間的Autosizing控製為空,而不是放置一個支柱。幸運的是,Interface Builder通過動畫顯示了您的修改對視圖自動尺寸調整行為的影響。
如果視圖的autoresizesSubviews屬性被設定為NO,則該視圖的直接子視圖的所有自動尺寸調整行為將被忽略。類似地,如果一個子視圖的自動尺寸調整掩碼被設定為UIViewAutoresizingNone,則該子視圖的尺寸將不會被調整,因而其直接子視圖的尺寸也不會被調整。
請注意:為了使自動尺寸調整的行為正確,視圖的transform屬性必須設定為恒等變換;其它變換下的尺寸自動調整行為是未定義的。
自動尺寸調整行為可以適合一些布局的要求,但是如果您希望更多地控制視圖的布局,可以在適當的視圖類中重載layoutSubviews方法。有關視圖布局管理的更多資訊,請參見“響應布局的變化”部分。