为啥 UITableView 只在输入第一个字符时自动滚动?
Posted
技术标签:
【中文标题】为啥 UITableView 只在输入第一个字符时自动滚动?【英文标题】:Why does UITableView only auto-scrolls when first character is typed?为什么 UITableView 只在输入第一个字符时自动滚动? 【发布时间】:2014-04-16 23:24:21 【问题描述】:我有一个动态增长的 UITextView 的 UITableView 单元格。单元格的高度设置正确。但是,由于某种原因,当我按 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:开始新行时光标部分隐藏
图片 B:现在自动滚动会在收到第一个字符后进行调整
【问题讨论】:
你能把代码放在你计算高度的地方吗?你包括插图吗?你是如何计算内在内容大小的? @MatíasR 我用一些代码摘录编辑了我的问题。 阅读这个帖子 ***.com/questions/19259886/… 这是 ios 7 中的一个已知错误 @ChrisChen 好的,我会测试一下。谢谢 啊好吧,我想也许你正在使用自动布局。我最近停止使用 HPGrowingTextView 支持这里解释的内容:corecocoa.wordpress.com/2013/11/09/… 【参考方案1】:问题不在于不断增长的文本视图,而在于 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];
【讨论】:
以上是关于为啥 UITableView 只在输入第一个字符时自动滚动?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 jQuery 的 .change() 事件只在鼠标右键单击时触发?
为啥当我滚动浏览 UITableView 时图像会不断调整大小?