Étant donné un UITableView
comment puis-je trouver l'emplacement d'un site spécifique UITableViewCell
? En d'autres termes, je veux obtenir son cadre par rapport à l'écran de mon iPhone, et non par rapport à l'écran de l'appareil. UITableView
. Donc si mon UITableView
est déroulé, l'emplacement de chaque UITableViewCell
devrait être plus haut sur l'écran, etc.
Réponses
Trop de publicités?En dehors de rectForRowAtIndexPath, il faut tenir compte du défilement.
Essayez ce code :
// Get the cell rect and adjust it to consider scroll offset
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
cellRect = CGRectOffset(cellRect, -tableView.contentOffset.x, -tableView.contentOffset.y);
Essayez ce qui suit (envoyer nil comme paramètre toView signifie que vous voulez convertir votre rectangle en coordonnées de fenêtre) :
CGRect r = [cell convertRect:cell.frame toView:nil];
Et n'oubliez pas que si une ligne particulière n'est pas visible actuellement, il se peut qu'il n'y ait pas de UITableViewCell pour elle - donc avant d'utiliser ce code, vous devez vérifier si la cellule est valide (et non nulle par exemple).
Swift 3
Par rapport à la tableView
:
let rect = self.tableView.rectForRow(at: indexPath)
Par rapport à la Screen
:
Si vous ne connaissez que le cell
,
if let indexPath = tableView.indexPath(for: cell) {
let rect = self.tableView.rectForRow(at: indexPath)
let rectInScreen = self.tableView.convert(rect, to: tableView.superview)
}
Si vous connaissez le indexPath
alors il n'est pas nécessaire d'appeler la if
déclaration.
Essayez-le sur
didSelectRowAtIndexPath
méthode
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// get current location of selected cell
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath];
CGRect rectInSuperview = [tableView convertRect:rectInTableView toView:[tableView superview]];
NSLog(@"Cell Y Is %f",rectInSuperview.origin.y);
NSLog(@"Cell X Is %f",rectInSuperview.origin.x);