UITableView
在以自定义UIView's
为节标题的平原中,有没有一种方法可以计算:
- 当其中一个部分位于顶部时,该部分与下一个部分之间的距离是多少?
我期待在这里计算:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
UITableView
在以自定义UIView's
为节标题的平原中,有没有一种方法可以计算:
我期待在这里计算:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
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]。
编辑
这仅在标题位于顶部时才有效。
(假设所有行的高度相同)
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
我能够通过执行以下操作来解决这个问题:
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;
完毕。