为啥 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 时图像会不断调整大小?

为啥 scanf (在 C 中)似乎只在第二次输入后才做出反应? [复制]

为啥 D3 对输入的关注只在第一次起作用?

多节 UITableView (swift)

为啥 UITableView 自定义单元格的第一个单元格总是在 Xcode 中的动作事件上被调用两次