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