總結了幾種設定UITableView的cell動態高度的方法
阿新 • • 發佈:2019-01-25
1.UITableView載入的順序是先得到表的行的高度,也就是 先呼叫heightForRowAtIndexPath方法,然後再呼叫cellForRowAtIndexPath,所以我們有兩個辦法實現自定義 cell高度(解決不同section的不同行高問題)。
一:改變它的載入順序,或者說白了就是計算好cell高度後,再次讓它載入heightForRowAtIndexPath方法;
二:直接在heightForRowAtIndexPath計算,做判斷,直接返回對應的高度。
以下是第一種方法的例項:
UITableView設定單元格的高度的方法
-
- (CGFloat)tableView
-
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;
-
return 64;
- }
reloadRowsAtIndexPaths方法將重新呼叫heightForRowAtIndexPath使單元格改變高度。
reloadRowsAtIndexPaths是在3.0.儲存NSIndexPath的原因是因為不可能在堆疊不溢位的情況下在 heightForRowAtIndexPath呼叫類方法例如cellForRowAtIndexPath 。