簡便的自動布局,對UIStackView的個人理解!


 


 

序言:

  更新了很久的Linux,我怕朋友們都視覺疲勞了,今天就更新在學ios開發時候,對一些知識點的理解。希望各位會喜歡!  

正文:

  UIStackView 類提供了一個高效的接口用於平鋪一行或一列的視圖組合,stackView提供了高效的單行單列自動布局的手段,一般情況下,我們不需要對stackView.subviews做任何約束,只需要通過對stackView的axis, distribution, alignment, spacing屬性進行修改;

  • axis(軸向) 屬性決定了 stack 的朝向,只有垂直或水平;
  • distribution(分布) 屬性決定了其管理的視圖在沿着其軸向上的布局;
  • Fill : 鋪滿
    Fill Equal : 等寬鋪滿
    Fill Proportionally : 等比例鋪滿
    Equal Spacing :等距離放置
    Equal Centering :各個試圖的中心距離保持一致,不夠放置則壓縮后面的試圖距離;
  • alignment(對齊) 屬性決定了其管理的視圖在垂直於其軸向上的布局;
  • Fill : 垂直方向上鋪滿
    Top : 沿頂端對齊
    Center : 沿中心線對其
    Bottom : 沿底部對齊
    First Baseline : 按照第一個子視圖的文字的第一行對齊,同時保證高度最大的子視圖底部對齊(只在axis為水平方向有效)
    Last Baseline : 按照最后一個子視圖的文字的最后一行對齊,同時保證高度最大的子視圖頂部對齊(只在axis為水平方向有效)
  • spacing(空隙) 屬性決定了其管理的視圖間的最小間隙;
  • baselineRelativeArrangement 屬性決定了其視圖間的垂直間隙是否根據基線測量得到,選中 Baseline Relative 將根據subview的基線調整垂直間距;
  • layoutMarginsRelativeArrangement 屬性決定了 stack 視圖平鋪其管理的視圖時是否要參照它的布局邊距,選中 Layout Margins Relative 將相對於標准邊界空白來調整subview位置;

  UIStackView 實現有對齊要求的視圖布局非常非常得簡單,而使用 UICollectionView 和 UITableView 來實現,相對而言就比較麻煩,相比於collectionView而言,stackView更加小巧靈活,然而根據過來人的說法,想要完成更精致的效果,最終還是得靠UICollectionView;

  • 源代碼:
  •  1 #import "ViewController.h"
     2 
     3 @interface ViewController ()
     4 
     5 @property (weak, nonatomic) IBOutlet UIStackView *VerticalStackView;
     6 @property (weak, nonatomic) IBOutlet UIStackView *HorizontalStackView;
     7 
     8 
     9 @end
    10 
    11 @implementation ViewController
    12 
    13 - (void)viewDidLoad {
    14     [super viewDidLoad];
    15     // Do any additional setup after loading the view, typically from a nib.
    16 }
    17 
    18 - (void)didReceiveMemoryWarning {
    19     [super didReceiveMemoryWarning];
    20     // Dispose of any resources that can be recreated.
    21 }
    22 
    23 - (IBAction)addStarBtn:(id)sender {
    24     
    25     UIImageView *starImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"star"]];
    26     starImg.contentMode = UIViewContentModeScaleAspectFit;
    27     
    28     [self.HorizontalStackView addArrangedSubview:starImg];
    29     [UIView animateWithDuration:0.25 animations:^{
    30         [self.HorizontalStackView layoutIfNeeded];
    31     }];
    32     
    33 }
    34 
    35 - (IBAction)reduceStarBtn:(id)sender {
    36     
    37     UIImageView *starImg = self.HorizontalStackView.subviews.lastObject;
    38     
    39     [self.HorizontalStackView removeArrangedSubview:starImg];
    40     [self.HorizontalStackView reloadInputViews];
    41     [UIView animateWithDuration:0.25 animations:^{
    42         [self.view layoutIfNeeded];
    43         [starImg removeFromSuperview];
    44     }];
    45 }
    46 
    47 
    48 @end

     

使用環境:

 


  根據GitHub上Most Stars前幾名的demo來看,stackView最多就是應用於運行時的界面變化,其自動約束的特性盡顯無疑,如下圖:

  

結束總結: 

  博客園:愛家人愛老婆的IT男

  微信公眾號:程序猿的野生香蕉【公眾號:你可以下載到我的教程,工具,筆記,以及其他我分享的資源,資源今天可能晚點上傳,不過我會每天更新。】 ----附上官方UIstackView :回復 UIstackView-----


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM