autoresizing是iOS中傳統的界面自動佈局方式,經過它,當父視圖frame變換時,子視圖會自動的作出相應的調整。佈局
任何一個view都有autoresizingMask這個屬性,經過這個屬性能夠設置當前view與其父視圖的相對關係。咱們先來看UIViewAutoresizing這個枚舉:spa
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0,//默認 UIViewAutoresizingFlexibleLeftMargin = 1 << 0,//與父視圖右邊間距固定,左邊可變 UIViewAutoresizingFlexibleWidth = 1 << 1,//視圖寬度可變 UIViewAutoresizingFlexibleRightMargin = 1 << 2,//與父視圖左邊間距固定,右邊可變 UIViewAutoresizingFlexibleTopMargin = 1 << 3,//與父視圖下邊間距固定,上邊可變 UIViewAutoresizingFlexibleHeight = 1 << 4,//視圖高度可變 UIViewAutoresizingFlexibleBottomMargin = 1 << 5//與父視圖上邊間距固定,下邊可變 };
下面咱們經過效果來看這些屬性的做用:code
先建立兩個view,爲了區分,設置不一樣的背景色:博客
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIView * view1 = [[UIView alloc]initWithFrame:CGRectMake(20, 40, 200, 200)]; view1.backgroundColor=[UIColor redColor]; UIView * view2 = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)]; view2.backgroundColor=[UIColor greenColor]; [view1 addSubview:view2]; [self.view addSubview:view1]; }
設置view2的自動佈局屬性以下:it
view2.autoresizingMask=UIViewAutoresizingFlexibleBottomMargin;
這時的效果以下:io
改變view1的frame以下:可視化
UIView * view1 = [[UIView alloc]initWithFrame:CGRectMake(20, 40, 300, 300)];
效果以下:autolayout
這時view2的下邊距離相對父視圖是可變的。im
設置以下:技術
view2.autoresizingMask=UIViewAutoresizingFlexibleHeight;
效果以下:
能夠看出,這時子視圖的高度是隨父視圖變化而自動改變的。
以下設置:
view2.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin;
效果以下:
這時子視圖的左邊是隨父視圖變化而可變的。
同理,UIViewAutoresizingFlexibleRightMargin將使子視圖右邊與父視圖的距離可變。
UIViewAutoresizingFlexibleTopMargin將使子視圖上邊與父視圖距離可變。UIViewAutoresizingFlexibleWidth將使子視圖的寬度可變。
注意:這些自動佈局的屬性是能夠疊加的,好比保持視圖與父視圖邊距不變,以下設置:
view2.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
效果以下:
在storyboard中咱們能夠更加輕鬆的進行autoresizing自動佈局。在view設置欄中有autoresizing這個設置,點中相應的箭頭,就是剛纔咱們探討的設置選項。而且咱們把鼠標放在這個上面的時候,右側會自動爲咱們預覽效果。
若是你以爲autoresizing很強大,那麼你就太容易知足了,autoresizing能夠知足大部分簡單的自動佈局需求,但是它有一個致命的缺陷,它只能設置子視圖相對於父視圖的變化,卻不能精確這個變化的度是多少,所以對於複雜的精準的佈局需求,它就力不從心了。可是有一個好消息告訴你,iOS6以後的autolayout自動佈局方案,正是解決複雜佈局的好幫手,咱們在下一遍博客中再進行詳細討論。
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592