调整大小后 UITableView 混乱 | Objective-C

Posted

技术标签:

【中文标题】调整大小后 UITableView 混乱 | Objective-C【英文标题】:UITableView mess up after resizing | Objective-C 【发布时间】:2017-10-11 00:20:44 【问题描述】:

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

问题是,当 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

【问题讨论】:

【参考方案1】:

我找到了答案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];
    


【讨论】:

【参考方案2】:

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


【讨论】:

以上是关于调整大小后 UITableView 混乱 | Objective-C的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 单元格在调整大小后不响应输入

异步下载后图像调整大小 AFNetworking UiTableView

在 insertSections 不起作用后 UITableView 键盘调整大小

iOS UITableView tableHeaderView 在转换/重新出现后调整大小

如何避免在方向更改后调整 UITableView(旋转)单元格的大小?

如何强制 uitableview 调整单元格的大小(在停用高度约束后)?