2

UITableView在以自定义UIView's为节标题的平原中,有没有一种方法可以计算:

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

我期待在这里计算:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
4

3 回答 3

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]。

编辑

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

于 2013-05-28T11:18:12.937 回答
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
于 2013-05-28T13:32:27.283 回答
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;

完毕。

于 2013-05-29T06:08:58.837 回答