调整大小后,UITableView会搞乱Objective-C的

时间:2017-10-11 00:20:45

标签: ios objective-c iphone uitableview

我正在使用TableView创建聊天应用。每个单元代表一个msg。单元格高度根据msg的内容而变化。 例如,如果它是一张照片,它将具有固定的大小。 如果它是一个文本,它的大小将取决于msg中的行数。 当用户尝试根据keyBoard的大小发送一个msg时,整个TableView也会改变大小。

问题是当tableView大小改变时,tableView单元格搞砸了! 这只在向下滚动时重新生成(重新渲染消失的单元格)

更新:如果某些单元格不可见(big tableView),也会发生这种情况。在重新调整大小之前。而且它没有任何类型的东西。因为如果msgs都是文本

,它会一样
- (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

2 个答案:

答案 0 :(得分: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];
    }

}

答案 1 :(得分:0)

1 - 当键盘弹出获得键盘大小时 -

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

}