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

时间:2014-04-16 23:24:22

标签: uitableview uitextview

我有一个UITableView单元,动态增长的UITextView。正确设置了单元格的高度。但是,出于某种原因,当我按Enter键并开始换行时,自动滚动不会调整偏移量(参见图像A),但仅当我在该行上键入第一个字符时(见图B)。有什么想法吗?

编辑:

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

-(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:开始换行时,光标部分隐藏 A: Cursor is partially hidden when starting a new line

图像B:现在,自动滚动会在收到第一个字符后进行调整 B: Now auto-scroll makes the adjustment once first character is received

1 个答案:

答案 0 :(得分:0)

问题不在于增长的文本视图,而在于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];
    }
}