dequeueReusableCellWithIdentifier与不同大小的单元格

时间:2013-10-24 14:46:11

标签: ios uitableview

第1步 - 这工作正常

我有UITableView加载自定义UITableViewCells

第2步 - 这是有点工作

我更改了UITableViewCell高度,以便UITextView中单元格中包含的所有数据都可见

我设法获取UItextView数据并使用以下代码调整其大小:

UITextView *dummy = [[UITextView alloc] init];
dummy.font = [UIFont systemFontOfSize:14];
dummy.text = cell.textView.text;

CGSize newSize = [dummy sizeThatFits:CGSizeMake(270.0f, 500.0f)];

//get the textView frame and change it's size
CGRect newFrame = cell.textView.frame;
newFrame.size = CGSizeMake(270.0f, fmaxf(newSize.height, 60));
cell.textView.frame = newFrame;

//resize the cell view I add +95 because my cell has borders and other stuff...
CGRect cellFrame = CGRectMake(0, 0, 320, newFrame.size.height+95);
cell.cellView.frame = cellFrame;

然后我设法使用委托函数heightForRowAtIndexPath设置UITableViewCell高度:

现在,当我运行代码并向上和向下滚动表格单元格时,行为并不总是如预期的那样...即单元格大小并不总是正确的大小,但如果我向上和向下滚动它有时会加载再次正确的尺寸。 我想也许dequeueReusableCellWithIdentifier是问题

cellIdentifier = @"tableCell";
ctTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

因为我正在使用相同的标识符回收不同大小的单元格...

有人可以就如何最好地解决这个问题给我一些指导吗?

感谢!!!

Screenshot1 of when the cell is first loaded

screenshot 2 after scrolling notice how the top cell is rectified

2 个答案:

答案 0 :(得分:0)

你实现了以下方法吗?

  • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForRowAtIndexPath

如果它们彼此不同,你应该为每一行设置高度

答案 1 :(得分:0)

我首先在cellForRowAtIndexPath方法中动态添加UITextView。假设(数据数组包含要在单元格内显示的内容) //定义

#define CELL_TEXTVIEW_WIDTH = 320        
#define CELL_TEXTVIEW_HEIGHT = 9999  
#define PADDING = 5

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 static NSString *CellIdentifier = @"tableCell";

ctTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

if(cell == nil){

cell =  [[tableView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

 NSString *_data = [data objectAtIndex:indexPath.row];

CGSize _data_contentsize  = [_data sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(CELL_TEXTVIEW_WIDTH, CELL_TEXTVIEW_HEIGHT) lineBreakMode:NSLineBreakModeWordWrap];

UITextView *dummy=[[UITextView alloc] initWithFrame:CGRectMake(5, 5, 290, _data_contentsize +(PADDING * 2))];

// add Font and text color for your textview here

[cell.contentView addSubview:dummy];

return cell;

}

在此之后计算heightForRowAtIndexPath方法下的单元格高度。