前面的幾篇文章裏我分別介紹了線性佈局(MyLinearLayout),相對佈局(MyRelativeLayout),框架佈局(MyFrameLayout)這三種佈局。這三種佈局中 :git
線性佈局主要應用於容器視圖裏面的全部子視圖依次從上往下排列或者從左往右排列的場景。github
子視圖1 |
子視圖2 |
子視圖3 |
子視圖4 |
子視圖1 | 子視圖2 | 子視圖3 | 子視圖4 |
固然咱們也能夠用線性佈局嵌套線性佈局的方法來實現一些複雜的界面佈局,好比(這個例子若是用MyTableLayout實現將更加簡單):xcode
|
|||
|
|||
|
相對佈局主要用於容器視圖中的各個子視圖之間的位置和高寬以及子視圖和容器視圖之間具備必定的依賴和約束關係的場景。好比說子視圖1的位置在子視圖2的右下角,而且寬度等於子視圖3的寬度,而子視圖3的底部又在容器視圖的底部。app
子視圖1(等寬3) | ||
子視圖2 | ||
子視圖3(等寬1) |
相對佈局由於須要指定各子視圖之間的依賴關係,所以若是設置不當就會產生遞歸死循環的狀況,並且在某種程度上不利於子視圖之間的位置的更新和變化等等,其中IOS自帶的AutoLayout其實就是一套相對佈局的實現,相對佈局功能很強大也能夠很容易佈局複雜的界面,缺點是使用不當的話就容易形成約束死循環的狀況。框架
框架佈局主要用於容器視圖中的個子視圖在容器視圖的上,中,下,左,中,右,拉昇填充,居中顯示等11種狀況。函數
左上 | 中上 | 右上 |
左中 | 居中 | 右中 |
左下 | 中下 | 右下 |
框架佈局中的子視圖只跟容器視圖之間產生關係,子視圖之間沒有任何關聯關係。oop
1、表格佈局的介紹佈局
在一些實際的應用界面中,咱們但願咱們的子視圖以表格的形式展現出來,這些表格展現能夠是正規的幾行幾列而且固定高寬的形式,也多是每一行的列數都不一樣,也多是每行的高度不同,也多是一行內的各列的寬度也不同,atom
水平表格佈局spa
垂直表格佈局
要實現上面的兩種界面風格,咱們能夠藉助MyTableLayout來實現。
MyTableLayout是從MyLinearLayout中繼承而來,所以表格佈局也分爲垂直表格佈局和水平表格佈局,樣式請參考上面的圖例的展現風格。而表格的風格樣式一樣經過
orientation屬性來設置。不論是垂直表格佈局仍是水平表格佈局。咱們在創建了表格佈局視圖並指定了表格風格後,咱們首先的步驟是要爲表格添加行(若是是水平表格其實就是添加列,下面若是爲說明都是如此概念),那這個步驟能夠經過MyTableLayout的方法:
-(void)addRow:(CGFloat)rowHeight colWidth:(CGFloat)colWidth;
-(void)insertRow:(CGFloat)rowHeight colWidth:(CGFloat)colWidth atIndex:(NSInteger)rowIndex;
來實現,前者是往表格佈局尾部添加一行,然後者則是在指定的位置插入一行。這裏須要說明的參數是rowHeight,colWidth的意義,咱們知道只要咱們插入一行時咱們老是須要指出插入的這一行的行高是多少,同時要指出插入的這行的列單元格的寬度是如何指定的(每列的寬度固定,仍是有單元格本身指定等等)
rowHeight爲-1時表示由最高的單元格視圖決定本行高度,每一個單元格視圖須要本身設置高度;爲0表示均分高度,單元格視圖不須要設置高度;大於0表示固定高度,單元格視圖不須要設置高度.
colWidth 爲-2時表示每一個單元格視圖須要本身指定寬度,總體行寬和表格佈局一致;爲-1表示每一個單元格視圖須要本身指定寬度,整個行寬包裹全部子視圖;爲0表示均分寬度,這時候單元格視圖沒必要設置寬度;大於0表示單元格視圖固定寬度,這時候單元格視圖能夠沒必要設置寬度。
同時咱們也提供了對行操做的其餘方法:
//刪除指定的行
-(void)removeRowAt:(NSInteger)rowIndex;
//交行兩個行的內容
-(void)exchangeRowAt:(NSInteger)rowIndex1 withRow:(NSInteger)rowIndex2;
//獲得行視圖,從返回咱們能夠看出,咱們調用插入行操做時,系統內部會自動創建一個MyLinearLayout線性佈局視圖做爲行視圖,若是是垂直表格則默認是水平線性佈局,而若是是水平表格則默認是垂直線性佈局,所以咱們能夠經過這個方法來設置行的其餘的各類屬性,好比說行間距(xxxMargin來實現)。
-(MyLinearLayout*)viewAtRowIndex:(NSInteger)rowIndex;
//返回當前有多少行
-(NSUInteger)countOfRow;
-(void)addCol:(UIView*)colView atRow:(NSInteger)rowIndex;
-(void)insertCol:(UIView*)colView atIndexPath:(NSIndexPath*)indexPath;
-(void)removeColAt:(NSIndexPath*)indexPath;
-(void)exchangeColAt:(NSIndexPath*)indexPath1 withCol:(NSIndexPath*)indexPath2;
@interface NSIndexPath(MyTableLayoutEx)
+(instancetype)indexPathForCol:(NSInteger)col inRow:(NSInteger)row;
@property(nonatomic,assign,readonly)NSInteger col;
@end
同時咱們也方便的提供了單元格列視圖的獲取和數量的獲取的方法
//返回列視圖
-(UIView*)viewAtIndexPath:(NSIndexPath*)indexPath;
//返回指定行的列的數量。
-(NSUInteger)countOfColInRow:(NSInteger)rowIndex;
orientation = LVORIENTATION_HORZ, 水平表格也就是一個瀑布流風格的表格,咱們能夠經過將表格放入到UIScrollView中進行從上到下的滾動以便展現全部內容。先看界面佈局效果:
4、總結
好了,表格佈局的內容就介紹到這裏了,表格佈局的內部實現其實就是一個線性佈局套線性佈局的封裝,可是他簡化了咱們插入視圖的方法,從而很容易的佈局出各類風格的佈局,咱們能夠從上往下依次佈局,也能夠從左往右依次佈局。若是您以爲這篇文章可以幫助到您,或者能成爲您界面佈局的解決方案,那麼請到個人github:
https://github.com/youngsoft/MyLinearLayout 中下載這套界面解決框架庫,若是您以爲好用就記得給我點贊哦,若是有什麼不明確的能夠加我QQ:156355113聯繫我。