需求: 可變的表格高度。動態的加載的數據,同時支持reloadData.
第一個想法:- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 調用
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
這樣的話就會造成cellForRowAtIndexPath用兩遍,性能先不說會不會出現什么BUG。
網上找資料: 來自高勇 http://gaoyong.diandian.com/post/2012-08-14/40036292960
操作方法:
需要在因UITableView 的datasource變化后,導致某一個確定的cell需要被
reload (reloadRowsAtIndexPaths). reload 后需要在該cell中添加一些豎型排列子視圖 (addsubview)並且讓該subview在可視區域里面。
在 reload部分。cellForRowAtIndexPath部分。(reload的時候會自動調用cellForRowAtIndexPath)增加 了部分UIScrollView的scroll相關的代碼。(UITableView繼承自UIScrollView)。發現 cellForRowAtIndexPath被循環調用。
但是懷疑作者 在調用UITableViewCell *cell=[self tableView: tableView cellForRowAtIndexPath: indexPath]; 時可能錯誤的寫成 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];造成了遞歸。
第二個方法:用自適應的label 讓cell的高度跟着適應。
CGSize constraint = 預先設置的寬高;
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
然后在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 返回這個高度。當然局限性也很強就是必須是cell適應label的高度,要是有些圖片了之類的就廢了~~
第三種方法:我擦他了~ 還沒想出來~