iOS有關橫向TableView的東西

以前看到Apple store裏面有橫向的tableview,固然也有多是collectionview啦。git

尤爲是項目中只有一條那麼須要橫向滑動的東西,就沒有必要使用龐大的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,就不解釋爲何是這個值了,由於我不知道言語怎麼表達,我也找不到合適的畫圖工具。本身體驗一下就能體會到。spa

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

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

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 }

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

 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的連接,能夠去下載源碼看看get

由於UITableView的回調,太多了,我就封裝了幾個,若是你須要更多的,能夠另行的仿照實現。源碼

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

由於cell已經被旋轉,因此直接正常的frame的佈局就能夠了。

 

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

 

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

相關文章
相關標籤/搜索