1.UITableView加載的順序是先得到表的行的高度,也就是先調用heightForRowAtIndexPath方法,然后再調用cellForRowAtIndexPath,所以我們有兩個辦法實現自定義cell高度(解決不同section的不同行高問題)。
一:改變它的加載順序,或者說白了就是計算好cell高度后,再次讓它加載heightForRowAtIndexPath方法;
二:直接在heightForRowAtIndexPath計算,做判斷,直接返回對應的高度。
以下是第一種方法的實例:
UITableView設置單元格的高度的方法
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
- return 64;
- }
下面介紹如何擴大當前單元格並且縮小其他單元格:
- // Somewhere in your header:
- NSIndexPath *selectedCellIndexPath;
- // And in the implementation file:
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- selectedCellIndexPath = indexPath;
- // Forces the table view to call heightForRowAtIndexPath
- [tableView reloadRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
- // Note: Some operations like calling [tableView cellForRowAtIndexPath:indexPath]
- // will call heightForRow and thus create a stack overflow
- if(selectedCellIndexPath != nil && [selectedCellIndexPath compare:indexPath] == NSOrderedSame){
- return 128;
- }else{
- return 64;
- }
- }
reloadRowsAtIndexPaths方法將重新調用heightForRowAtIndexPath使單元格改變高度。
reloadRowsAtIndexPaths是在3.0.存儲NSIndexPath的原因是因為不可能在堆棧不溢出的情況下在 heightForRowAtIndexPath調用類方法例如cellForRowAtIndexPath 。
