這裏的長和短的它:
- 你的細胞寬度由它在的tableview的寬度決定
[編輯:如果它是一個分組的表視圖,如果您使用的是iPhone或iPad,則該單元格比桌面寬度窄20 - 60像素。]
- Your cel l高度由
heightForRowAtIndexPath
方法確定。
如果你手動設置單元格的框架,這將是當你使用一個子類的細胞要添加基於細胞的尺寸除了子視圖沒用。
即使在這種情況下,建議使用rectForRowAtIndexPath:(NSIndexPath*)indexPath
方法從tableview中獲取單元格的框架,然後將該框架設置爲單元格的框架(將框架的原點Y設置爲0之後)。
我對UIToolBar不太確定,但是您的子視圖的框架在更改單元框架時不會改變。
也許如果你能告訴我們你想達到的目標,我們可以爲你提供一個解決方案?
--------------------編輯--------------------
因此,您需要根據新的子視圖動態地將子視圖添加到單元格,然後調整它的高度。這是會得到毛茸茸所以這裏有雲:
在您的.h文件中聲明:
BOOL subviewAdded;
在您.m文件,在init,這樣做:
subviewAdded = NO;
讓我們假設你希望單元格的高度在沒有子視圖的情況下爲50,在子視圖中爲100。因此,你的heightForRow方法應該是:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return (subviewAdded?100.0f:50.0f);
}
這意味着,最初因爲subviewAdded是NO,所有的細胞都會有較小的高度。
現在,一個子視圖添加到單元格上點擊它,並改變它的高度動態的,在你的didSelectRow方法做到這一點:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the cell at this indexPath
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
if(subviewAdded)
{
subviewAdded = NO;
for(int i = 0; i < [thisCell.contentView.subviews count]; i++)
{
UIView *thisSubview = [thisCell.contentView.subviews objectAtIndex:i];
[thisSubview removeFromSuperview];
}
}
else
{
UIView *someView = [[UIView alloc] initWithFrame:someFrame];
[thisCell.contentView addSubview:someView];
[someView release];
subviewAdded = YES;
}
NSMutableArray *array = [NSMutableArray array];
[array addObject:indexPath];
[tableView reloadRowsAtIndexPaths:array
withRowAnimation:UITableViewRowAnimationFade];
}
所以發生了什麼事情發生在這裏的是你要添加一個子視圖到你點擊的這個單元格。重新加載這個單元格會調用heightForRowAtIndexPath
並做一個很好的小淡入淡出動畫並改變你的tableview高度。
重要提示:理想情況下,您應該維護一個帶有布爾值的NSNumbers數組。數組大小應該與您擁有的tableview單元的數量相同。
在heightForRow中,您將檢查該數組,而不是使用整個tableView的單個布爾值。這將確保您可以爲不同的單元格設置不同的高度。
這看起來是這樣的:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL thisBool = (BOOL)[[booleanArray objectAtIndex:indexPath.row] boolValue];
return (thisBool?100.0f:50.0f);
}
因爲它意味着我沒有在這裏發佈的所有代碼,我已經張貼應該把你對你的方式來執行布爾數組的東西是什麼。
無論如何,你是。我只是自己測試這個代碼,所以它的工作:)
來源
2011-05-13 19:41:38
Sid
嗨aherlambang ...答案有幫助嗎?請選擇正確的答案...如果不是,請評論讓我們知道它沒有幫助。 :) – Sid 2011-05-18 17:09:15