¿Cómo puedo encontrar el índice de la célula completamente visible (completa visible) en UITableView

Quiero encontrar un índice completo de celdas visible desde mi UITableView . Aquí tengo la image adjunta.

introduzca la descripción de la imagen aquí

En esta image número 1 y número 12 no son completamente visibles, por lo que no debe devolver el índice de esa celda. Solo quiero un índice de células totalmente visible que sea solo 2,3,4,5,6,7,8,9,10,11.

Puede usar [tableView rectForRowAtIndexPath:indexPath] en cada celda del resultado de array de [tableView indexPathsForVisibleRows] y ver si sus cuadros están completamente dentro de sus límites de vista. y mientras está en ello, hágale una categoría para su uso futuro.

Algo como esto:

 -(NSArray *)visibleIndexPathIncludingPartials:(BOOL)includePartials { NSArray *result = [self.tableView indexPathsForVisibleRows]; if(includePartials){ return result; } NSMutableArray *mutableResult = [NSMutableArray array]; for(NSIndexPath *indexPath in result){ CGRect cellRect = [self.tableView rectForRowAtIndexPath:indexPath]; if(!CGRectIsEmpty(cellRect)){ CGRect rectInTableView = [self.tableView convertRect:cellRect toView:self.tableView.superview]; if(rectInTableView.origin.y < 0.0){//Checks if it is beyond actual view bounds continue; } if(self.navigationController && !self.navigationController.navigationBar.isHidden){//in case navigation bar exists and you're expanding under top bar if(rectInTableView.origin.y < CGRectGetMaxY(self.navigationController.navigationBar.frame)){ continue; } } if(CGRectGetMaxY(rectInTableView) > CGRectGetMaxY(self.tableView.superview.bounds)){ continue; } //If you have bottom view like toolbars, yo should weed them out just like this } else { // If the index path is invalid, this might happen continue; } [mutableResult addObject:indexPath]; } result = mutableResult; return result; } 

puede usar indexPathsForVisibleRows para get todos los visiblerows, luego get cellRect usando rectForRowAtIndexPath y comprobar si la celda contiene el enlace de tableview.

 NSMutableArray *arr = [[NSMutableArray alloc]init]; for (NSIndexPath *indexVisible in tableView.indexPathsForVisibleRows) { CGRect cellRect = [tableView rectForRowAtIndexPath:indexVisible]; BOOL isVisible = CGRectContainsRect(tableView.bounds, cellRect); if (isVisible) { //you can also add rows if you dont want full indexPath. //[arr addObject:[NSString stringWithFormat:@"%ld",(long)indexVisible.row]]; [arr addObject:indexVisible]; } } NSLog(@"%@",arr); 

Espero que esto te ayudará.