为什么UITableView仅在键入第一个字符时自动滚动?

为什么UITableView仅在键入第一个字符时自动滚动?,uitableview,uitextview,Uitableview,Uitextview,我有一个UITableView单元格,其中包含动态增长的UITextView。单元格的高度设置正确。但是,由于某些原因,当我点击Enter键并开始一个新行(参见图像a)时,auto scroll不会调整偏移量,而仅当我在该行上键入第一个字符时(参见图像B)。有什么想法吗 编辑: 我正在使用并获取其代表给我的高度。它充满了整个细胞。我根据屏幕截图给出的值测量了屏幕截图,并与之匹配。以下是相关方法: -(void)growingTextView:(HPGrowingTextView *)growin

我有一个UITableView单元格,其中包含动态增长的UITextView。单元格的高度设置正确。但是,由于某些原因,当我点击Enter键并开始一个新行(参见图像a)时,auto scroll不会调整偏移量,而仅当我在该行上键入第一个字符时(参见图像B)。有什么想法吗

编辑:

我正在使用并获取其代表给我的高度。它充满了整个细胞。我根据屏幕截图给出的值测量了屏幕截图,并与之匹配。以下是相关方法:

-(void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height {
    _messageHeight = height;

    // this will trigger cell height resize
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == kMessageRow) {
        return _messageHeight;
    }

    return 50;
}
图A:开始新行时光标部分隐藏

图B:现在自动滚动在收到第一个字符后进行调整

问题不在于不断增长的文本视图,而在于UITableView自动滚动,它在检测返回键时似乎不会触发。所以我的解决方案是手动检查新行字符并强制滚动到单元格底部

- (void)growingTextViewDidChange:(HPGrowingTextView *)growingTextView {

    NSString *text = growingTextView.text;
    NSInteger endIndex = text.length - 1;

    if (endIndex >= 0 && [[text substringFromIndex:endIndex] isEqualToString:@"\n"]) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:textViewSection];
        [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
    }
}

你能把代码放在你计算高度的地方吗?包括插图吗?您是如何计算内部内容大小的?@MatíasR我用一些代码摘录编辑了我的问题。阅读此线程这是iOS中已知的错误7@ChrisChen哦,好的,我会测试一下。谢谢好吧,我以为你在用自动布局。我最近停止使用HPGrowingTextView,转而支持下面的解释: