检测UITableView节标题之间的距离

时间:2013-05-28 11:11:05

标签: iphone ios uitableview

在包含自定义UITableView作为节标题的普通UIView's中,有没有办法计算:

  • 当其中一个部分位于顶部时,该部分与下一部分之间的距离会是什么?

我期待在此计算:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

3 个答案:

答案 0 :(得分:2)

您可以通过调用tableView:numberOfRowsInSection:协议中的UITableViewDataSourceDelegate方法找到该部分中的行数。您可以使用tableView:heightForRowAtIndexPath:协议中的UITableViewDelegate方法获取该部分中每行的高度。添加所有行的高度,您就拥有了所需的距离。

您的代码看起来像这样,假设您有对tableview和section的引用。

float totalHeight = 0;

for (int i = 0; i < [tableViewDataSourceDelegate 
                                       tableView:tableView 
                           numberOfRowsInSection:section]; i ++) {
    totalHeight += [tableViewDelegate 
                            tableView:tableView 
              heightForRowAtIndexPath:[NSIndexPath 
                                   indexPathForRow:i 
                                         inSection:section]];
}

没有机会测试这段代码,但它应该工作[tm]。

修改

这仅在标题位于顶部时才有效。

答案 1 :(得分:0)

(假设所有行都是相同的高度)

NSIndexPath *topCellIndexPath = [tableView indexPathsForVisibleRows][0];
UITableViewCell *topCell = [tableView cellForRowAtIndexPath: topCellIndexPath];
CGFloat distanceToNextSection = [tableView convertRect: [topCell frame] fromView: topCell.superview].origin.y - tableView.contentOffset.y + ([self tableView: tableView numberOfRowsInSection: topCellIndexPath.section] - topCellIndexPath.row)*tableView.rowHeight

答案 2 :(得分:0)

我能够通过以下方式解决这个问题:

  • 在创建节标题之前,请检查您是否具有给定节的节标题。如果你确实从NSMutableArray返回。如果不继续下去。
  • 创建部分标题时,请在NSMutableArray中保留对其的引用。

  • 滚动时:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

执行以下操作:

// Get the toppest section
NSUInteger sectionNumber = [[self.tableView indexPathForCell:[[self.tableView visibleCells] objectAtIndex: 0]] section];

// Get a reference to it
SFBasicSectionHeader *topHeader = [arrayOfWeakHeaders objectAtIndex:sectionNumber];

SFBasicSectionHeader *bellowHeader;
// Check if it's Ok to get the bellow header
if (sectionNumber+1<[arrayOfWeakHeaders count] && [arrayOfWeakHeaders objectAtIndex:sectionNumber +1])
{
    bellowHeader = [arrayOfWeakHeaders objectAtIndex:sectionNumber+1];
}

两者之间的区别是:

CGFloat differenceBetweenTopAndBellowSection = bellowHeader.frame.origin.y - topHeader.frame.size.height - self.tableView.contentOffset.y;

完成。