iOS有關橫向TableView的東西

來源:互聯網
上載者:User

標籤:

之前看到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

 

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

 

iOS有關橫向TableView的東西

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.