2017-10-11 49 views
-1

我正在使用TableView創建一個聊天應用程序。每個單元格代表一個味精。單元格高度根據msg的內容更改。例如,如果它的照片將具有固定大小。 如果它的文字大小取決於msg中的行數。 當用戶嘗試發送基於keyBoard大小的味精時,整個TableView也會改變大小。調整大小後,UITableView搞砸了Objective-C

問題是,當tableView大小發生變化時,tableView單元格會變得混亂! 這隻發生在向下滾動時(重新渲染消失的單元格)

更新:如果某些單元格看不見(大tableView),則會發生這種情況。在重新調整大小之前。而且它也沒有任何類型的東西。因爲它做同樣的,如果封郵件都是文本

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

    if ([[[msg objectAtIndex:indexPath.row] objectForKey:@"type"] isEqualToString:@"msg"]) { 
     int numberOfline= [[[msg objectAtIndex:indexPath.row] objectForKey:@"line"] intValue]; 
     return topMergeH + topBubbleH + bottomBubbleH + bottomMergeH + (bubbleHieght*numberOfline); 
    } 

    else 
     return topMergeH + topBubbleH + bottomBubbleH + bottomMergeH + bubbleHieght + 220; 

} 


- (void) changeTextFieldPoistion { 

    //TextFieldHight = 30 
    [_typeRef setFrame: 
    CGRectMake(0,self.view.frame.size.height-keyBoardHeight-30 
       , _typeRef.frame.size.width, _typeRef.frame.size.height)]; 
    [_myTableView setFrame: 
    CGRectMake(_myTableView.frame.origin.x, _myTableView.frame.origin.y 
       , 374, self.view.frame.size.height-_myTableView.frame.origin.y-keyBoardHeight-30)]; 
} 

Pic1: Before Re-sizing Pic2: After Re-sizing 1

回答

0

我找到了答案here

的問題是,其小區標識

代碼:之前

static NSString *simpleTableIdentifier = @"ChatSendTableViewCell"; 
ChatSendTableViewCell *cell = 
(ChatSendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
if (cell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:simpleTableIdentifier owner:self options:nil]; 
    cell = [nib objectAtIndex:0]; 

} 

代碼之後:

static NSString *CellIdentifier1 = @"ChatSendTableViewCell"; 
UITableViewCell *cell; 

if (indexPath.section == 0) 
{ 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier1]; 
    } 
    else 
    { 
     cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; 
    } 

} 
0

1 - 當鍵盤Appers獲取鍵盤大小 -

keyboardInfo = [notification userInfo]; 
kbSize = [[keyboardInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 

2,如果你的chatTable包含任何行 -

whwre [messageList]是行

if ([messageList count]) { 

    NSIndexPath *iPath = [NSIndexPath indexPathForRow:[messageList count]-1 inSection:0]; 

    UITableViewCell *lastCell = [chatTable cellForRowAtIndexPath:iPath]; 

    CGRect aRect = self.view.frame; 

    aRect.size.height -= kbSize.height; 

    if (!CGRectContainsPoint(aRect, lastCell.frame.origin)) { 

     CGRect bkgndRect = lastCell.superview.frame; 

     bkgndRect.size.height += kbSize.height; 

     [lastCell.superview setFrame:bkgndRect]; 

     [chatTable setContentOffset:CGPointMake(0.0,(lastCell.frame.origin.y+lastCell.frame.size.height) - (kbSize.height)) animated:NO]; 
    } 

}