将 UITableView 单元格滚动到表格边界之外

Posted

技术标签:

【中文标题】将 UITableView 单元格滚动到表格边界之外【英文标题】:Scroll UITableView Cell beyond table bounds 【发布时间】:2015-02-09 13:14:23 【问题描述】:

我有一个高度变化的 UITableView。

我希望在每个单元格选择中通过将其移动到屏幕中间来获得“焦点”。问题是移动表格中的上下单元格,因为它们不能滚动超出表格的上限和下限。我也更喜欢用动画来做到这一点..

有什么建议吗? 谢谢!

【问题讨论】:

【参考方案1】:

我创建了一个小例子来说明如何实现这一点: https://github.com/vkozlovskyi/CenterCellExample

您只需要计算 UITableView 的滚动偏移量,并为更改设置动画:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    // Get offset for cell
    CGFloat centerOffset = self.tableView.frame.size.height / 2 - self.tableView.rowHeight / 2;

    // Content offset
    CGFloat total = indexPath.row * self.tableView.rowHeight;

    [UIView animateWithDuration:0.3 animations:^
        self.tableView.contentOffset = CGPointMake(0, total - centerOffset);
    ];

它适用于所有单元格,也适用于上层和下层。

【讨论】:

但这仅适用于中间单元格,上下滚动不会弯曲边界.. 我改了答案,试试这个解决方案【参考方案2】:

您可以使用 contentInset 属性为表格视图的内容添加额外的空间。在表格视图的上方和下方添加额外的空间将使您的单元格一直滚动到表格视图的中间。

UITableView * tableView = self.tableView ;
CGRect bounds = self.tableView.bounds ;
CGFloat extraSpaceNeeded = 0.5 * ( bounds.size.height - tableView.rowHeight ) ;
tableView.contentInset = (UIEdgeInsets) .top = -extraSpaceNeeded, .bottom = -extraSpaceNeeded  ;

现在你可以使用

[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle 动画:动画];

【讨论】:

以上是关于将 UITableView 单元格滚动到表格边界之外的主要内容,如果未能解决你的问题,请参考以下文章

重新加载uitableview后滚动表格视图

在不中断用户滚动的情况下将单元格添加到 UITableView 的顶部

UITextField 成为第一响应者后,UITableView 不会将单元格滚动到可见

将 UIScrollView 添加到表格单元格似乎会影响表格滚动性能

弹出窗口中的 UITableView 不会停止滚动

uitableview 自定义单元格在向下滚动 uitableview 时丢失其内容