UITableview 滚动时有两个不同的自定义单元格重叠

Posted

技术标签:

【中文标题】UITableview 滚动时有两个不同的自定义单元格重叠【英文标题】:UITableview with two different custom cells overlapping while scrolling 【发布时间】:2016-11-18 09:49:55 【问题描述】:

我有一个UITableView,有两个不同的自定义单元格。一个会显示正常的文本消息,另一个会显示一些文本和图像。我可以在cellForRowAtIndexPath 中使用两个不同的自定义单元格,并且能够看到两个不同的单元格,如下所示

但是每当我滚动表格视图时,单元格就会像下面那样重叠。

下面是我的代码

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
    //minimum size of your cell, it should be single line of label if you are not clear min. then return UITableViewAutomaticDimension;

    return UITableViewAutomaticDimension;

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

    id cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([cell isKindOfClass:[TicketTableViewCell class]]) 
        return 171;
     else 
        return UITableViewAutomaticDimension;
    



-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return [chatHistoryArr count];


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


    NSString *msgTypeStr = [msgTypeArr objectAtIndex:indexPath.row];
    if ([msgTypeStr isEqualToString:@"msg"]) 


    static NSString *simpleTableIdentifier = @"ChatConversationTableViewCell";

    ChatConversationTableViewCell *cell = (ChatConversationTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];



    if (cell == nil)
    



                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChatConversationTableViewCell" owner:self options:nil];
                cell = [nib objectAtIndex:0];

    

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    cell.chatmsgLabel.text = [chatHistoryArr objectAtIndex:indexPath.row];
    cell.timeAndDateMsgLabel.text = [timeAndDateMsgArr objectAtIndex:indexPath.row];


     return cell;
    

    else
        static NSString *simpleTableIdentifier = @"TicketTableViewCell";

        TicketTableViewCell *cell = (TicketTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];


        if (cell == nil)
        


                    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TicketTableViewCell" owner:self options:nil];
                    cell = [nib objectAtIndex:0];


        

        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        cell.tktMsgTxtView.text = [chatHistoryArr objectAtIndex:indexPath.row];

        cell.ticketDateAndTimeLbl.text =[timeAndDateMsgArr objectAtIndex:indexPath.row];



        return cell;
    






显示数据或显示不同的单元格没有问题,唯一的问题是重叠。我已经尝试过可用的解决方案,但没有运气。以下是其中之一。

在 cellForRowAtIndexPath 中添加以下代码但没有用。

for(UIView *view in cell.contentView.subviews)
        if ([view isKindOfClass:[UIView class]]) 
            [view removeFromSuperview];
        
    

尝试了很多来解决这个问题,但没有运气。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

更改tableViewCell高度的代码

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

    NSString *msgTypeStr = [msgTypeArr objectAtIndex:indexPath.row];
    if ([msgTypeStr isEqualToString:@"msg"]) 
        return UITableViewAutomaticDimension;
     else 
        return 171;
    

它将解决您的重叠问题。

【讨论】:

【参考方案2】:

试试这个

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d",indexPath.row];

UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];

if (cell == nil)
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

【讨论】:

这对我不起作用。我正在使用自定义单元格。感谢回复

以上是关于UITableview 滚动时有两个不同的自定义单元格重叠的主要内容,如果未能解决你的问题,请参考以下文章

支持 UITableView 的自定义 UIScrollView

在同一个 uitableview 中显示两个不同的自定义单元格 - swift firebase

UITableView 中滚动的自定义视图

UITableView 的自定义滚动条

滚动会弄乱 UITableView 中的自定义单元格

用于 UITableView 的自定义 XIB 单元格在滚动时卡住/卡住