Frage

Ich habe eine iPad -Anwendung von Bare Bones Master/Detail über die angegebene Vorlage erstellt. Es schafft zwei Ansichtsregler (Master und Detail). Ich habe eine Ansicht zusätzliche Ansichtsregler erstellt, die über den Hauptansichts -Controller hinausgesprungen werden (bohren Sie die Tabellenansicht, bis sie schließlich auf eine Zelle getroffen werden, die die Detailansicht bevölkert. Ich habe den folgenden Code hinzugefügt, um den Master View Controller Popover zu laden Zu den angegebenen Abmessungen (Code unten zeigt auch, wann eine Auswahl aus der Master View Controller TableView ausgewählt wird):

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

Wenn der Popover ausgewählt wird, wenn die Anwendung zum ersten Mal geladen wird, sieht alles großartig aus. Wenn ein Benutzer jedoch auf den MasterViewController zurückklickt, ist die Größe des Popover die gleiche Größe wie der größte Ansichtscontroller, der auf den Stapel gedrückt wurde. Ich habe herum gesucht und den folgenden Code in der Master View Controller -Klasse hinzugefügt:

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

Dies hat jedoch keine Wirkung. Sobald der Popover geschlossen ist (entweder durch Rotation oder Deaktivierung des Popovers der Benutzeroberfläche), wird die Popover -Größe des größten Tischansichts -Controllers, der zuvor auf den Stapel gedrückt wurde, noch beibehalten und ignoriert die obigen Abmessungen vollständig. Was vermisse ich?

War es hilfreich?

Lösung

Ich konnte Ihr ganzes Problem nicht verstehen, aber ich denke, dass die Basis Ihres Problems eine schlechte Größe eines Popovers hat.

Normalerweise kommen die Probleme mit der Popover -Größe von der Tatsache, dass [UIViewController contentSizeForViewInPopover] kann nur eingestellt werden, bevor Sie das erstellen UIPopoverController Beispiel. Es ist nur der Standardwert für die Popover -Größe.

Wenn Sie das erstellen UIPopoverController Instanz mit Ihrem Controller als Inhalt, die contentSizeForViewInPopover wird kopiert in [UIPopoverController popoverContentSize] Und nie wieder lesen. Wenn Sie es auf dem Inhalt ändern, wird die Popover -Größe nicht aktualisiert.

Der einzige Weg, wie Sie die Größe eines bereits erstellten ändern können UIPopoverController Instanz verwendet die Eigenschaft [UIPopoverController popoverContentSize] oder Methode [UIPopoverController setPopoverContentSize:animated:].

Andere Tipps

Sie versuchen, die Popover -Größe im MasterViewController selbst festzulegen. Hier liegt das Problem. Zum self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0); Um dies zu arbeiten, müssen Sie dies stattdessen im DetailViewController verwenden, da der DetailViewController derjenige ist, der einen Popover hat. Grundlegende Idee hier ist, dass Sie die Größe im übergeordneten Ansichtscontroller und nicht im Controller selbst festlegen.

Sie müssen die Frames einrichten.

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

            [self.navigationController pushViewController:incomingCallViewController.view]; 

Dies ist natürlich ein Beispielcode aus einem meiner Projekte, ersetzen Sie einkallviewController durch Ihre eigene Klasse und deklarieren Sie ihn im Header

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top