Come per cambiare immagine popover dimensioni quando popping off controller di vista supplementari

StackOverflow https://stackoverflow.com/questions/8306652

Domanda

Ho creato un'applicazione ossa nude master / dettaglio iPad utilizzando il modello in dotazione. Si crea due controller di vista (principali e di dettaglio). Ho creato un controller di vista vista aggiuntivi che vengono saltate sulla parte superiore del controller della vista master (più o meno il drill-down tableviews fino a quando finalmente colpire una cella che popola la vista di dettaglio. Ho aggiunto il codice sottostante per caricare la visualizzazione maestro regolatore popover alle dimensioni specificate (codice di seguito anche quando mostra una selezione è selezionato dal tableView maestro vista del regolatore):

@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];
}

Quando si seleziona il popover quando i primi carichi applicativi, tutto sembra grande. Tuttavia, quando un utente fa clic indietro al MasterViewController, la dimensione del popover è la stessa dimensione come la più grande controller della vista che viene inserito nello stack. Ho cercato in giro e ho aggiunto il seguente codice nella classe di visualizzazione master regolatore:

- (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];
}

Tuttavia, questo non ha alcun effetto. Anche una volta che il popover è chiuso (mediante rotazione o deselezionando la popover sull'interfaccia utente), la dimensione del popover grande controller della vista tabella precedentemente inserito nello stack è ancora trattenuto e ignora completamente le dimensioni di cui sopra. Che cosa mi manca?

È stato utile?

Soluzione

Non riuscivo a capire tutto il vostro problema, ma penso che la base del problema è cattivo dimensioni di un Popover.

Di solito, i problemi con dimensioni Popover venire del fatto che [UIViewController contentSizeForViewInPopover] può essere impostato solo prima di creare l'istanza UIPopoverController. E 'solo il valore predefinito per le dimensioni popover.

Quando si crea l'istanza UIPopoverController con il controller come il suo contenuto, il contentSizeForViewInPopover viene copiato in [UIPopoverController popoverContentSize] e mai leggere di nuovo. Se si modifica sui contenuti, dimensioni Popover non viene aggiornato.

L'unico modo in cui è possibile modificare le dimensioni di un'istanza UIPopoverController già creato sta usando la [UIPopoverController popoverContentSize] proprietà o il metodo [UIPopoverController setPopoverContentSize:animated:].

Altri suggerimenti

Si sta tentando di impostare la dimensione popover nel MasterViewController stesso. Qui sta il problema. Per self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0); al lavoro si dovrà utilizzare questo nel DetailViewController invece, dal momento che la DetailViewController è quella che ha un popover. idea di base è che si imposta la dimensione in controller di vista genitore e non il controllore stesso.

la vostra intenzione di avere per impostare i frame.

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

            [self.navigationController pushViewController:incomingCallViewController.view]; 

questo, naturalmente, è il codice di esempio da uno dei miei progetti, sostituire incomingCallViewController con la propria classe e dichiararla nell'intestazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top