咱们知道,在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中来实现。