咱們知道,在IOS中咱們要想進行視圖的各方向的停靠,須要用到autoresizingMask,以及不停的計算應該停靠的位置,也就是計算frame中的x,y,width,height,這樣大量的編碼致使計算繁瑣並且容易出錯,所以我這裏推出了另外新的佈局模式MyFrameLayout。這個佈局能夠讓子視圖實現左中右,上中下,填充等功能的佈局,同時還能夠設置停靠的佈局的位置的邊距,咱們對子視圖擴展出了停靠位置的屬性:xcode
@property(nonatomic,assign)MarignGravity marginGravity;app
這個屬性用來控制子視圖停靠在MyFrameLayout的方位,這些方位能夠是以下方位的或組合:oop
MGRAVITY_NONE //不採用停靠模式佈局
MGRAVITY_HORZ_LEFT //水平居左編碼
MGRAVITY_HORZ_CENTER //水平居中atom
MGRAVITY_HORZ_RIGHT //水平居右spa
MGRAVITY_HORZ_FILL //水平填充整個佈局,視圖會有拉伸.net
MGRAVITY_VERT_TOP //垂直居上code
MGRAVITY_VERT_CENTER //垂直居中blog
MGRAVITY_VERT_BOTTOM //垂直居下
MGRAVITY_VERT_FILL //垂直填充整個佈局,視圖會有拉伸
MGRAVITY_CENTER //整個視圖居中
MGRAVITY_FILL //整個視圖填滿布局視圖
除了能夠讓子視圖停靠在佈局的方位外,還能夠指定子視圖離停靠位置的邊距,這個能夠經過擴展的視圖的四個屬性:
@property(nonatomic,assign)CGFloat topMargin;
@property(nonatomic,assign)CGFloat leftMargin;
@property(nonatomic,assign)CGFloat bottomMargin;
@property(nonatomic,assign)CGFloat rightMargin;
這四個屬性用來設置視圖離停靠位置的四個距離。同時MyFrameLayout中還提供一個padding的屬性用來控制總體的子視圖離本身的邊距。
由於這個佈局的使用比較簡單,下面直接能夠看圖:
對應的代碼以下:
從代碼中咱們能夠看到每一個視圖只須要設置marginGravity的對應的停靠的位置,以及設置對應的xxxMargin邊距,還有設置MyFrameLayout的padding值來設置裏面裏面的子視圖離本身的邊距。
總結:
對於那些但願固定在某個位置的子視圖來講,咱們能夠經過將視圖加入到MyFrameLayout中來實現。