2010-09-08 17 views
5

Tengo un UIPopoverController que contiene un UITableView. El popover se redimensiona en la función -viewDidAppear del controlador de vista para ajustarse al contenido de la tabla. Mientras que el popover cambia de tamaño correctamente, su flecha ya no apunta al original CGRect. ¿Hay alguna manera de forzar al popover a reubicarse después de un cambio de tamaño para que su flecha apunte hacia su objetivo deseado?Ajustar la posición de UIPopoverController después de cambiar el tamaño

EDIT: no puede establecer el tamaño de la popover en -viewDidLoad ya la vista de tabla no se carga sus datos hasta que -viewDidAppear se llama, y ​​como resultado que no sé qué tamaño debe ser la popover hasta entonces . Además, cambio el tamaño del popover cuando se hace clic en una de las celdas de la vista de tabla para mostrar otra vista, lo que también hace que la flecha ya no apunte al objetivo deseado.

+0

Puede establecer el tamaño del popover antes de que se cargue la tabla. Las dos cosas están totalmente separadas. Lo que está haciendo es establecer el tamaño del marco de encapsulado; si el tamaño del contenido real de 'UITableView' es más largo, obtendrá las barras de desplazamiento, al igual que sucede cuando carga una vista de tabla en un iPhone y el contenido es más alto que 480 píxeles. –

+0

@Shaggy Frog: quiero evitar las barras de desplazamiento cuando sea posible. – titaniumdecoy

+0

Una vez más, lo malinterpretas. Universalmente, si el contenido en un 'UITableView' es más alto que su marco, mostrará barras de desplazamiento. Ese es un tema completamente separado de lo que estás preguntando, que es ajustar el marco de una vista de popover, que he explicado cómo hacerlo. –

Respuesta

6

Creo que esta puede ser la forma incorrecta de hacerlo, ya que tienes que volver a hacer el comportamiento integrado que coloca la flecha para empezar.

No cambio el tamaño del contenido de popover en viewDidAppear. He establecido la propiedad contentSizeForViewInPopover en viewDidLoad método del controlador de vista, por ejemplo:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView 
} 

(advertencia rápida: si está desarrollando una aplicación universal, este código causará un accidente de tiempo de ejecución en dispositivos que ejecutan 3.1.x y a continuación)

También puede establecer el tamaño de contenido para el controlador popover antes de presentarlo, lo que debería resolver su problema. Echa un vistazo a la propiedad popoverContentSize.

+0

Gracias, pero eso no funcionará en mi situación; ver mi pregunta actualizada – titaniumdecoy

+1

@titaniumdecoy funcionará, vea mi respuesta –

+0

@ shaggy frog popovercontentsize es una buena idea 'self.popoverController.popoverContentSize = CGSizeMake (320, 300);' haré un trabajo.gracias hombre –

3

De acuerdo con this answer, puede llamar al presentPopoverFromRect:inView: en el popover nuevamente y volverá a colocar la flecha. No lo he probado yo mismo.

+2

Esto está documentado en Technical Q & A QA1694: http://developer.apple.com/iphone/library/qa/qa2010/qa1694.html –

Cuestiones relacionadas