滚动UITableView Cell超出表格范围

时间:2015-02-09 13:14:23

标签: ios objective-c uitableview cell

我有一个改变高度的UITableView。

我希望在每个细胞选择中都能获得“焦点”。将它移动到屏幕中间。问题是移动表格中的上部和下部单元格,因为它们无法滚动超出表格的上限和下限。我也喜欢用动画来做这件事。

有什么建议吗? 谢谢!

2 个答案:

答案 0 :(得分: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);
    }];
}

它适用于所有细胞,也适用于上层和下层。

答案 1 :(得分:1)

您可以使用 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 
                         animated:animated];