Pregunta

He creado una aplicación de iPad maestro/detalle de Bare Bones utilizando la plantilla suministrada. Crea dos controladores de vista (maestro y detalle). He creado una vista de controladores de vista adicionales que se aparecen en la parte superior del controlador de vista maestra (más o menos perforación de las versiones de tabla hasta que finalmente presione una celda que poca la vista de detalle. He agregado el código a continuación para cargar el controlador de vista maestra Popover A las dimensiones especificadas (el código a continuación también muestra cuándo se selecciona una selección de la vista del controlador de vista maestra):

@implementation MasterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.vehicles = [[NSArray alloc] initWithObjects:@"Cars", @"Trucks", @"Boats", nil];

        self.title = @"Vehicle Type";
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    }
    return self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.studySessionViewController)
    {
        self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    }
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}

Cuando se selecciona el popover cuando la aplicación se carga por primera vez, todo se ve muy bien. Sin embargo, cuando un usuario hace clic en el MasterViewController, el tamaño del Popover es del mismo tamaño que el controlador de vista más grande que se empujó en la pila. He buscado y agregé el siguiente código en la clase de controlador de vista maestra:

- (void)viewWillAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewDidAppear:animated];
}

Sin embargo, esto no tiene efecto. Además, una vez que el Popover está cerrado (ya sea por rotación o deseleccionando el Popover en la interfaz de usuario), el tamaño de Popover del controlador de vista de tabla más grande que previamente se empujó en la pila todavía se conserva e ignora completamente las dimensiones anteriores. ¿Qué me estoy perdiendo?

¿Fue útil?

Solución

No pude entender todo su problema, pero creo que la base de su problema es el mal tamaño de un popover.

Por lo general, los problemas con el tamaño de Popover surgen del hecho de que [UIViewController contentSizeForViewInPopover] se puede configurar solo antes de crear el UIPopoverController instancia. Es solo el valor predeterminado para el tamaño de Popover.

Cuando creas el UIPopoverController instancia con su controlador como su contenido, el contentSizeForViewInPopover se copia en [UIPopoverController popoverContentSize] Y nunca más lea. Si lo cambia en el contenido, el tamaño de Popover no se actualiza.

La única forma en que puede cambiar el tamaño de un ya creado UIPopoverController La instancia está utilizando la propiedad [UIPopoverController popoverContentSize] o método [UIPopoverController setPopoverContentSize:animated:].

Otros consejos

Está intentando establecer el tamaño de Popover en el propio MasterViewController. Aquí se encuentra el problema. Para self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0); Para trabajar, tendrá que usar esto en DetilleViewController en su lugar, ya que el detallviewController es el que tiene un Popover. La idea básica aquí es que establece el tamaño en el controlador de vista parente y no el controlador en sí.

Tendrás que configurar los marcos.

incomingCallViewController = [[IncomingCallViewController alloc]initWithNibName:@"IncomingCallViewController" bundle:nil];
            [incomingCallViewController.view setFrame:CGRectMake(400, 200, 377, 243)];

            [self.navigationController pushViewController:incomingCallViewController.view]; 

Por supuesto, este es un código de muestra de uno de mis proyectos, reemplace IncomingCallViewController con su propia clase y lo declare en el encabezado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top