我有一个高度不断变化的UITableView。
我想在每一个单元格选择中,通过将其移动到屏幕中间来获得"焦点"。问题是移动表格中的上下单元格,因为它们无法滚动到表格的上下限之外。我也更喜欢用动画来做这件事。。
有什么建议吗?谢谢
我创建了一个如何实现这一点的小示例: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);
}];
}
它适用于所有单元格,也适用于上下单元格。
您可以使用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在滚动位置:UITableViewScrollPositionMiddleanimatized:animatized];