我对heightForRowAtIndexPath
函数有一个奇怪的问题。
我需要第三行的高度更高,但它总是为下一行(在本例中为4)行设置高度。
我会解释:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
int height = 40;
if(indexPath.row == 3) height = 120;
NSLog(@"cell %i [height = %i]", indexPath.row, height);
return height;
}
记录下来:(似乎很好)
cell 0 [height = 40]
cell 1 [height = 40]
cell 2 [height = 40]
cell 3 [height = 120]
cell 4 [height = 40]
cell 5 [height = 40]
...
它看起来像这样:
**(要清楚:灰色行不是一个部分,而是一个不同的单元格样式。)
我错过了什么或者我做错了什么? 谢谢!
根据要求,我添加了cellForRowAtIndexPath代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"FrontendCell";
int cellType = [[self.cellTypes objectAtIndex:indexPath.row] integerValue];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
switch (cellType) {
case FRONTEND_CELL_TYPE_DETAIL:{
cell = [[FrontendDetailTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.title.text = [self.titles objectAtIndex:indexPath.row];
cell.description.text = [self.descriptions objectAtIndex:indexPath.row];
cell.price.text = [self.details objectAtIndex:indexPath.row];
cell.price.text = [self.details objectAtIndex:indexPath.row];
}break;
}
答案 0 :(得分:1)
也许,一切正常,但没有像我们期望的那样呈现。
我的意思是第3行的高度设置为120,但它的设计被移动,所以看起来下一个单元格的高度为120。请尝试选择那些单元格,也许选择背景将提供信息。还尝试使用单元格设计来阐明
答案 1 :(得分:0)
我对可能出现问题的地方有一个大概的了解。我相信定制细胞和正常细胞之间存在混淆。由于您有2种不同类型的Cell,在 cellForRowAtIndexPath 中,您应该执行类似
的操作- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * cellIdentifier1 = @"FrontendCell";
static NSString * cellIdentifier2 = @"NotFrontendCell";
if(indexPath.row==1){
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
}
else{
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier2];
}
//Other code
}
确保故事板上有 NotFrontendCell 的其他自定义单元格。
答案 2 :(得分:0)
提供self.cellTypes及其实现的列表。 你可能错了。