IOS不用AutoLayout也能實現自動佈局的類(2)----MyFrameLayout 框架佈局

咱們知道,在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的屬性用來控制總體的子視圖離本身的邊距。

由於這個佈局的使用比較簡單,下面直接能夠看圖:

 

 

對應的代碼以下:

 

 

[objc]  view plain copy
  1. MyFrameLayout *fl = [[MyFrameLayout alloc] initWithFrame:self.view.bounds];  
  2.   fl.autoresizingMask =  UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;  
  3.   fl.padding = UIEdgeInsetsMake(20, 20, 20, 20);  
  4.   fl.backgroundColor = [UIColor grayColor];  
  5.     
  6.   //顯示全屏  
  7.   UILabel *fill = UILabel.new;  
  8.   fill.text = @"                fill";  
  9.  // fill.textAlignment = NSTextAlignmentCenter;  
  10.   fill.backgroundColor = [UIColor blueColor];  
  11.   fill.marginGravity = MGRAVITY_FILL;  
  12.   [fl addSubview:fill];  
  13.     
  14.     
  15.     
  16.   //左右填充。  
  17.   UILabel *horzFill = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 120)];  
  18.   horzFill.text = @"Horz Fill";  
  19.   horzFill.textAlignment = NSTextAlignmentCenter;  
  20.   horzFill.backgroundColor = [UIColor greenColor];  
  21.   horzFill.marginGravity = MGRAVITY_HORZ_FILL;  
  22.   [fl addSubview:horzFill];  
  23.     
  24.     
  25.   //左右居中  
  26.   UILabel *horzCenter = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];  
  27.   horzCenter.text = @"Horz Center";  
  28.   horzCenter.backgroundColor = [UIColor whiteColor];  
  29.   horzCenter.marginGravity = MGRAVITY_HORZ_CENTER;  
  30.   [fl addSubview:horzCenter];  
  31.   
  32.     
  33.   //左上  
  34.   UILabel *topLeft = UILabel.new;  
  35.   topLeft.text = @"topLeft";  
  36.   [topLeft sizeToFit];  
  37.   topLeft.backgroundColor = [UIColor whiteColor];  
  38.   topLeft.marginGravity = MGRAVITY_HORZ_LEFT | MGRAVITY_VERT_TOP;  
  39.   [fl addSubview:topLeft];  
  40.     
  41.   //左中  
  42.   UILabel *centerLeft = UILabel.new;  
  43.   centerLeft.text = @"centerLeft";  
  44.   [centerLeft sizeToFit];  
  45.   centerLeft.backgroundColor = [UIColor whiteColor];  
  46.   centerLeft.marginGravity = MGRAVITY_HORZ_LEFT | MGRAVITY_VERT_CENTER;  
  47.   [fl addSubview:centerLeft];  
  48.     
  49.     
  50.   //左下  
  51.   UILabel *bottomLeft = UILabel.new;  
  52.   bottomLeft.text = @"bottomLeft";  
  53.   [bottomLeft sizeToFit];  
  54.   bottomLeft.backgroundColor = [UIColor whiteColor];  
  55.   bottomLeft.marginGravity = MGRAVITY_HORZ_LEFT | MGRAVITY_VERT_BOTTOM;  
  56.   [fl addSubview:bottomLeft];  
  57.     
  58.     
  59.   //中上  
  60.   UILabel *topCenter = UILabel.new;  
  61.   topCenter.text = @"topCenter";  
  62.   [topCenter sizeToFit];  
  63.   topCenter.backgroundColor = [UIColor greenColor];  
  64.   topCenter.marginGravity = MGRAVITY_HORZ_CENTER | MGRAVITY_VERT_TOP;  
  65.   [fl addSubview:topCenter];  
  66.     
  67.     
  68.   //中中。  
  69.   UILabel *centerCenter = UILabel.new;  
  70.   centerCenter.text = @"centerCenter";  
  71.   [centerCenter sizeToFit];  
  72.   centerCenter.backgroundColor = [UIColor greenColor];  
  73.   centerCenter.marginGravity = MGRAVITY_HORZ_CENTER | MGRAVITY_VERT_CENTER;  
  74.   [fl addSubview:centerCenter];  
  75.     
  76.     
  77.   //中下  
  78.   UILabel *bottomCenter = UILabel.new;  
  79.   bottomCenter.text = @"bottomCenter";  
  80.   [bottomCenter sizeToFit];  
  81.   bottomCenter.backgroundColor = [UIColor greenColor];  
  82.   bottomCenter.marginGravity = MGRAVITY_HORZ_CENTER | MGRAVITY_VERT_BOTTOM;  
  83.   [fl addSubview:bottomCenter];  
  84.   
  85.     
  86.   //右上  
  87.   UILabel *topRight = UILabel.new;  
  88.   topRight.text = @"topRight";  
  89.   [topRight sizeToFit];  
  90.   topRight.backgroundColor = [UIColor greenColor];  
  91.   topRight.marginGravity = MGRAVITY_HORZ_RIGHT | MGRAVITY_VERT_TOP;  
  92.   [fl addSubview:topRight];  
  93.     
  94.     
  95.   //右中  
  96.   UILabel *centerRight = UILabel.new;  
  97.   centerRight.text = @"centerRight";  
  98.   [centerRight sizeToFit];  
  99.   centerRight.backgroundColor = [UIColor greenColor];  
  100.   centerRight.marginGravity = MGRAVITY_HORZ_RIGHT | MGRAVITY_VERT_CENTER;  
  101.   [fl addSubview:centerRight];  
  102.   
  103.     
  104.   UILabel *bottomRight = UILabel.new;  
  105.   bottomRight.text = @"bottomRight";  
  106.   [bottomRight sizeToFit];  
  107.   bottomRight.backgroundColor = [UIColor greenColor];  
  108.   bottomRight.marginGravity = MGRAVITY_HORZ_RIGHT | MGRAVITY_VERT_BOTTOM;  
  109.   [fl addSubview:bottomRight];  
  110.     
  111.   
  112.   //居中顯示。  
  113.   UILabel *center = UILabel.new;  
  114.   center.text = @"center";  
  115.   [center sizeToFit];  
  116.   center.backgroundColor = [UIColor redColor];  
  117.   center.marginGravity = MGRAVITY_CENTER;  
  118.   center.leftMargin = 30;  
  119.   center.rightMargin = 30;  
  120.   center.topMargin = 30;  
  121.   center.bottomMargin = 30;  
  122.   [fl addSubview:center];  
  123.   
  124.     
  125.   [self.view addSubview:fl];  

 從代碼中咱們能夠看到每一個視圖只須要設置marginGravity的對應的停靠的位置,以及設置對應的xxxMargin邊距,還有設置MyFrameLayout的padding值來設置裏面裏面的子視圖離本身的邊距。

 

 

總結:

   對於那些但願固定在某個位置的子視圖來講,咱們能夠經過將視圖加入到MyFrameLayout中來實現。

相關文章
相關標籤/搜索