Popover del problema de posicionamiento de tableViewCell

Tengo un popover que se presenta desde otro popover. Ambos tienen tableViews. El segundo popover de la primera fila está bien, la flecha está apuntando al centro de la celda. Pero los demás apuntan a la parte superior de la celda, y la flecha está en la parte superior del popover, no en el medio …

Así es como construyo el popover.

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { self.editController = [[TitleViewController alloc] init]; [self.editController setSizeWithWidth:self.view.bounds.size.width AndHeight:140.0]; self.editController.directoryString = [directoryPath stringByAppendingPathComponent:[self.tableView cellForRowAtIndexPath:indexPath].textLabel.text]; self.editPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.editController]; CGRect aFrame = [self.tableView rectForRowAtIndexPath:indexPath]; [self.editPopoverController presentPopoverFromRect:aFrame inView:self.tableView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

} Aquí está el segundo popover extraviado.

EDITAR

SI cambio la dirección de flecha a Any , se ve así.

De nuevo a ArrowDirection = Left

Si hago los cambios recomendados (tenga en count que aFrame.size.height * 2 y no está dividido por dos), la flecha apunta al centro de la celda, pero todavía se coloca de forma incómoda en el nuevo marco emergente (no en el medio )

introduzca la descripción de la imagen aquí

Creo que hay 2 posibles soluciones a este problema:

  1. Cambia el valor de height de aFrame a aFrame.size.height / 2
  2. Cambie the presentPopoverFromRect:inView:permittedArrowDirections:animated :, y asegúrese de que el TableViewCell's contentView esté configurado como el parámetro ' inView '.

Espero que esto ayude.

De hecho, me encontré con el mismo problema cuando intentaba expandir una celda a full tableView-size. Preguntar un marco de celda y usarlo fuera de la table no es tan fácil como pensé que era. Sin embargo, encontré la solución después de algunas preguntas directas en el sr. Google.

Este primer método dará realmente el marco de la celda desde la perspectiva de tableView.

 CGRect rectInTableView = [myTableView rectForRowAtIndexPath:someIndexPath]; 

Esto es útil pero no la historia completa (al less no fue para mí). Es posible que desee traducir ese rectángulo a la vista si realmente es importante tener ese rectángulo.

Este segundo método traducirá este rect a la perspectiva de la vista en la que desea que esté el popover. En mi caso [myTableView superView] pero puede ser cualquier vista visible.

 CGRect rectInSuperview = [myTableView convertRect:rectInTableView toView:someView]; 

Este rectInSuperView es probablemente lo que buscas. Resolvió muchos de mis problemas de cellFrame y también podría ayudarte.

La flecha siempre apuntará en el medio de un rectángulo, por lo que si su rectángulo no funciona bien, "piratear" el rectángulo para que se ajuste a sus necesidades no es la mejor manera de resolver este problema.

Espero que esta solución funcione para usted también. Y si no, no dude en dejar un comentario y veré si puedo ayudarlo más.

no puedo ver por qué está sucediendo, pero también puedes agregar (cell.frame.height / 2) al marco del popover.y arreglarlo 🙂

Debe determinar, lo que la fila llama a popover. Cuando lo hizo, intente replace CGRect aFrame = [self.tableView rectForRowAtIndexPath:indexPath]; con

 CGRect aFrame = [self.tableView rectForRowAtIndexPath:indexPath]; 

editar: arregló el código para reflejar la solución real