2010-07-12 44 views
0

我要計算與多個子視圖,如標籤我的自定義單元格高度自定義的計算單元格高度,imageViews,按鈕等與多個視圖iphone

如何計算此單元格的大小?

似乎不建議在cellForRowAtIndxPath中執行此操作,同時在heightForRowAtIndexPath中使用Cell的實例,它會進入無限循環。

我能計算出高度的自定義單元格級小區,但我不知道我wheather應該在哪裏返回。

由於該方法,heightForRowAtIndexPath沒有得到一個細胞的實例,如何分辨這種方法,我想渲染計算的高度單元的類型?

任何幫助表示讚賞。

Thanx提前。

回答

2

理想情況下,你應該能夠計算單元的高度,而無需創建一個細胞它。將調用表格中的每個單元格(不僅僅是屏幕上的單元格),並且如果必須在該方法中創建完整的單元格對象,則可能會對性能產生很大影響。

你必須獲得細胞的基礎上,indexPath參數的類型,在你做同樣的方式在tableView:cellForRowAtIndexPath:

+0

我有不同類型的細胞中有許多子視圖。你能建議任何理想的位置來計算不同細胞的大小嗎?我是否必須使用單元格標識符來區分它們?我嘗試設置cell.frame是CGRectZero,但它不爲我工作.. – neha 2010-07-12 11:56:20

+0

你沒有選擇,只能計算'的tableView的高度:heightForRowAtIndexPath:'。如果您還需要這些值來設置單元格元素的高度,則應該使用單獨的方法進行計算。如果計算所有的'的tableView的高度:heightForRowAtIndexPath:'和'的tableView:的cellForRowAtIndexPath:'會影響您的表現,你應該緩存在'的tableView的計算值:heightForRowAtIndexPath:'。 – 2010-07-12 12:11:16

+0

好的,同意了。在這種情況下,我可以通過獲取所有子視圖並累積它們的高度來計算單元格高度,但是爲此我需要一個UITableViewCell實例。我怎樣才能做到這一點?使用單元格= [tableView cellForRowAtIndexPath:indexPath];使其成爲一個無限循環。如果我能夠做到這一點,那麼即使我不需要去「區分單元」部分。感謝名單。 – neha 2010-07-12 12:20:33

0

你總是可以加載viewWillAppearviewDidLoad你的細胞,然後將它們添加到NSArray。然後,在tableView:heightForRowAtIndexPath:中,使用提供的indexPath,返回數組中相關單元格的高度。然後,在tableView:cellForRowAtIndexPath中,再次使用提供的indexPath,返回數組中的相關單元格。

請注意:
如果您有很多單元格,這可能會導致您的用戶界面在加載單元格時鎖定。爲了避免這種情況,您可以創建一個自定義方法來填充數組,並在後臺線程上執行它。 另外,如果時間太長,tableView將不會顯示您的所有單元格,因爲您的數組未被完全填充。這意味着你應該在數組填充之後調用[tableView reloadData];

+0

我必須使用單元格標識符來區分heightForRowAtIndexPath中的單元格嗎?如何在這個方法中獲取單元格的實例? – neha 2010-07-12 12:10:55

+0

您不需要使用單元標識符來區分單元。相反,使用'tablePath:heightForRowAtIndexPath'和'tableView:cellForRowAtIndexPath'提供'indexPath'來訪問'indexPath'的行和部分屬性,並使用'objectAtIndex:'從數組中訪問相關的單元格。 – jrtc27 2010-07-12 12:22:48

+0

Thanx jrtc27 ..它幫助.. – neha 2010-07-12 13:52:33

-1

這種我是如何做的:

我的tableview叫category_type創建的細胞catgories陣列在其apearence的順序,然後我檢查類別類型和計算的基於文本的高度用於計算單元格的整個高度。

NSString *category = [NSString stringWithFormat:[category_type objectAtIndex:indexPath.row]]; 

if([category isEqualToString:@"xyz"]) 
{ 
    xyzInstance = [arrayWithObjectsToLoad objectAtIndex:indexPath.row]; 


    float textHeight = [MLUtils calculateHeightOfTextFromWidth:editorialInstance.eletitle : [UIFont fontWithName:@"Helvetica" size:13.0] :320 :UILineBreakModeWordWrap]; //Dyanamic label height 

    totalHt = 171 - 21 + textHeight + 20;  // My calculation for text part of label 
    return totalHt; 

} 

我爲所有類別都做了這個。