在包含自定义UITableView
作为节标题的普通UIView's
中,有没有办法计算:
我期待在此计算:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
答案 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;
完成。