iOS有關橫向TableView的東西


之前看到Apple store里面有橫向的tableview,當然也有可能是collectionview啦。

尤其是項目中只有一條那么需要橫向滑動的東西,就沒有必要使用龐大的collectionview了,點綴的使用一下橫向的tableview反而更方便和靈活。當然此處大部分的情況可能是在父tableview的cell中使用個橫向的tableview。

 下面就簡單的介紹一下,基於系統原生的UITableView封裝橫向tableview的要點。

我封裝tableview的時候主要使用了一種比較流行的方法,tableview旋轉-PI/2個單位的弧度(即逆時針旋轉90度),cell旋轉PI/2個單位弧度(即順時針旋轉90度)。這樣的最終結果就是tableview成為了橫向的。封裝的過程中有一個地方比較難以理解的,就是橫向的tableview的point問題,因為旋轉,默認的是以tableview的中心點旋轉,這樣就造成了旋轉后“看起來”的位置或者說Frame發生了改變,所以要修復這個因為旋轉造成的“Frame偏差”。此處,你可以拿着你的手機,豎着放在一張豎着的A4紙上面,手機的左上角與A4紙左上角重合,意味着point為(0,0),然后你把手機逆時針旋轉90度,看看有什么結果,結果應該是,手機左面突出了A4紙一部分,上面也距離紙的頂邊一定的距離。那么這個距離是多少呢,應該就是長的二分之一減去寬的二分之一,具體的代碼就是這樣寫的ABS(self.bounds.size.width - self.bounds.size.height) / 2,就不解釋為什么是這個值了,因為我不知道言語怎么表達,我也找不到合適的畫圖工具。自己體驗一下就能體會到。

所以此時的橫向tableview向右向上都偏移  ABS(self.bounds.size.width - self.bounds.size.height) / 2  這個距離就好了。

剩下的就是封裝的時候,實現UITableView的回調了,UITableView的必須實現的回調就必須實現了,然后非必需的也可以二次封裝,此時還可以給一個默認的的值,以便不實現改回調時該輪子能給出默認的值,如下面的這個樣子:

1 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
2     if ([self.delegate_Y respondsToSelector:@selector(h_tableView:heightForRowAtIndexPath:)]) {
3         return [self.delegate_Y h_tableView:self heightForRowAtIndexPath:indexPath];
4     }
5     return 100;
6 }

必須實現的回調也貼出來一下吧:

 1 #pragma mark - UITableViewDataSource
 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 3     if ([self.dataSource_Y respondsToSelector:@selector(h_tableView:numberOfRowsInSection:)]) {
 4         return [self.dataSource_Y h_tableView:self numberOfRowsInSection:section];
 5     }
 6     return 0;
 7 }
 8 
 9 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
10     if ([self.dataSource_Y respondsToSelector:@selector(h_tableView:cellForRowAtIndexPath:)]) {
11         return [self.dataSource_Y h_tableView:self cellForRowAtIndexPath:indexPath];
12     }
13     return nil;
14 }

不用仔細看代碼也沒問題,最后我會貼出coding的鏈接,可以去下載源碼看看

因為UITableView的回調,太多了,我就封裝了幾個,如果你需要更多的,可以另行的仿照實現。

說了這么多,再說說這個輪子的弱點吧,因為在使用xib或者storyboard拖約束布局的時候會產生問題,所以代碼中,默認的注釋掉了- (instancetype)initWithCoder:(NSCoder *)coder。推薦直接代碼寫frame。

因為cell已經被旋轉,所以直接正常的frame的布局就可以了。

 

代碼:https://coding.net/u/ysk/p/HorizontalTableView/git

 

就寫到這吧,有什么不妥或者感覺我寫的有什么不對的地方,歡迎指正啊。

 


免責聲明!

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



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