在我的iOS 7应用程序中,我的视图设置为“在顶栏下方延伸边缘”,因此当您向下滚动时,当您在导航栏下滚动时,我的uitableview具有半透明效果。但是当您滚动回顶部或加载时,它会将第一个单元格正确定位在导航栏下方,而不是位于导航栏下方。
问题是,indexPathsForVisibleRows看到导航栏下方的单元格。因此,例如,如果我们向下滚动以便我们看到的是单元格索引1(第二个单元格),则单元格索引0位于导航栏下方,当我们调用indexPathsForVisibleRows时,它返回索引0而不是索引1作为最低单元格是可见的。
还有其他方法吗?
答案 0 :(得分:9)
一个选项是获取导航栏底部的y坐标并将其转换为tableview的坐标系。完成后,您可以根据该点从tableview获取indexPath或单元格。
UINavigationBar *navbar = self.navigationController.navigationBar;
CGRect localFrame = [self.tableView convertRect:navbar.bounds fromView:navbar];
CGPoint point = CGPointMake(0, localFrame.origin.y + localFrame.size.height + 1);
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:point];
答案 1 :(得分:0)
safe area 是表视图中不包含任何半透明条的区域的名称。在安全区域中可以看到连续查找,如下所示:
CGRect safeArea = UIEdgeInsetsInsetRect(self.tableView.bounds, self.tableView.safeAreaInsets);
if([[self.tableView indexPathsForRowsInRect:safeArea] containsObject:indexPath]){
// row is visible
}