2016-11-18 5 views
1

Ich habe eine UITableView mit zwei verschiedenen benutzerdefinierten Zellen. Einer wird normale Textnachricht und andere mit etwas Text und Bild zeigen. Ich bin in der Lage zwei verschiedene individuelle Zellen in cellForRowAtIndexPath und in der Lage zu verwenden, um zwei verschiedene Zellen wie unter enter image description hereUITableview mit zwei verschiedenen benutzerdefinierten Zellen beim Scrollen

zu sehen, aber wenn ich die Tableview bewegen dann die Zellen überlappen sich wie unten.

enter image description here

Unten ist mein Code

-(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; 
    } 





} 

Keine Probleme in Daten, die zeigen oder verschiedene Zellen zeigt, das einzige Problem überlappend ist. Ich habe die verfügbaren Lösungen bereits ausprobiert, aber kein Glück. Unten ist einer von ihnen.

Hinzufügen der folgenden Code in CellForRowAtIndexPath, aber keine Verwendung.

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

Ich habe viel versucht, das Problem zu beheben, aber kein Glück. Jede Hilfe wird wirklich geschätzt.

Antwort

1

Code von tableViewCell Höhe ändern

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *msgTypeStr = [msgTypeArr objectAtIndex:indexPath.row]; 
    if ([msgTypeStr isEqualToString:@"msg"]) { 
     return UITableViewAutomaticDimension; 
    } else { 
     return 171; 
    } 
} 

Es Ihre Überschneidungen Problem beheben wird.

0

dies einmal versuchen

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

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

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

dies funktioniert nicht für mich. Ich verwende benutzerdefinierte Zellen. Danke für die Antwort – Madhu

Verwandte Themen