天天看點

iOS界面布局之一——使用autoresizing進行動态布局iOS界面布局之一——使用autoresizing進行動态布局

iOS界面布局之一——使用autoresizing進行動态布局

autoresizing是iOS中傳統的界面自動布局方式,通過它,當父視圖frame變換時,子視圖會自動的做出相應的調整。

一、通過代碼進行布局

任何一個view都有autoresizingMask這個屬性,通過這個屬性可以設定目前view與其父視圖的相對關系。我們先來看UIViewAutoresizing這個枚舉:

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//與父視圖上邊間距固定,下邊可變

};

下面我們通過效果來看這些屬性的作用:

先建立兩個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的自動布局屬性如下:

view2.autoresizingMask=UIViewAutoresizingFlexibleBottomMargin;

這時的效果如下:

iOS界面布局之一——使用autoresizing進行動态布局iOS界面布局之一——使用autoresizing進行動态布局

改變view1的frame如下:

UIView * view1 = [[UIView alloc]initWithFrame:CGRectMake(20, 40, 300, 300)];

效果如下:

iOS界面布局之一——使用autoresizing進行動态布局iOS界面布局之一——使用autoresizing進行動态布局

這時view2的下邊距離相對父視圖是可變的。

設定如下:

  view2.autoresizingMask=UIViewAutoresizingFlexibleHeight;

iOS界面布局之一——使用autoresizing進行動态布局iOS界面布局之一——使用autoresizing進行動态布局

可以看出,這時子視圖的高度是随父視圖變化而自動改變的。

如下設定:

view2.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin;

iOS界面布局之一——使用autoresizing進行動态布局iOS界面布局之一——使用autoresizing進行動态布局

這時子視圖的左邊是随父視圖變化而可變的。

同理,UIViewAutoresizingFlexibleRightMargin将使子視圖右邊與父視圖的距離可變。

UIViewAutoresizingFlexibleTopMargin将使子視圖上邊與父視圖距離可變。UIViewAutoresizingFlexibleWidth将使子視圖的寬度可變。

注意:這些自動布局的屬性是可以疊加的,比如保持視圖與父視圖邊距不變,如下設定:

view2.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

二、nib檔案中可視化設定自動布局

在storyboard中我們可以更加輕松的進行autoresizing自動布局。在view設定欄中有autoresizing這個設定,點中相應的箭頭,就是剛才我們探讨的設定選項。并且我們把滑鼠放在這個上面的時候,右側會自動為我們預覽效果。

iOS界面布局之一——使用autoresizing進行動态布局iOS界面布局之一——使用autoresizing進行動态布局

如果你覺得autoresizing很強大,那麼你就太容易滿足了,autoresizing可以滿足大部分簡單的自動布局需求,可是它有一個緻命的缺陷,它隻能設定子視圖相對于父視圖的變化,卻不能精确這個變化的度是多少,是以對于複雜的精準的布局需求,它就力不從心了。但是有一個好消息告訴你,iOS6之後的autolayout自動布局方案,正是解決複雜布局的好幫手,我們在下一遍部落格中再進行詳細讨論。

繼續閱讀