Frage

Die Prämisse ist bemerkenswert einfach. Ich eine modale Ansicht in einem iPad-App angezeigt werden soll, die eine UISplitViewController verwendet

Die Hierarchie Ansicht ist geradlinig:

                                              /- TableViewController1
                     /- root:TabBarController -- TableViewController2
SplitViewController -
                     \- detail:CustomViewController

Wenn ich auf einem der Tabellenzellen in TableViewController1 klicken, öffne ich eine modale Ansicht:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip {
  UIViewController *vc = [[MyModalClass alloc] init];
  UINavigationController *nc = [[UINavigationController alloc]
                                initWithRootViewController:vc];
  nc.modalPresentationStyle = UIModalPresentationFormSheet;
  nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  [self presentModalViewController:nc animated:true];
  [nc release];
  [vc release];
}

Das funktioniert ganz gut: die Ansicht erscheint. Die Probleme beginnen, wenn ich versuche, es anders als Landschaft in jeder Ausrichtung zu schließen.

In ModalViewController das folgende Verfahren durch eine UITabBarButton in der Navigationsleiste ausgelöst wird:

- (void) closeButtonInNavBarWasClicked:(id)sender {
  [self dismissModalViewControllerAnimated:true];
}

Und das ist, wo die Probleme beginnen.

Wenn dieser Code aufgerufen wird, die modale Ansicht verschwindet, ABER: der TabBarController (die Stammansicht der geteilten Ansicht) ist plötzlich gedreht und in der Größe. Der Inhalt ist plötzlich zur Seite und teilweise überdeckt die Details zu sehen. Die Detailansicht wird nicht kleiner sein die Größe verändert, es ist nur zum Teil durch die Stammansicht abgedeckt.

Die einzige Situation, in der dieses Problem nicht wird nicht angezeigt, wenn ich auf der TableViewController1 Zelle tippen, wenn die App im Portrait-Modus ist. Trotz der Stammansicht in einem popover zu sein (die eine reichliche Quelle von Fehlern sein könnte), funktioniert alles einwandfrei.

Einige Dinge, die ich bereits versucht haben, ohne Erfolg:

  • Sichern Sie die Tab-Leiste, nur TableViewController1 als Root-Controller der geteilten Ansicht angezeigt werden
  • Erstellen eines Delegaten-Protokoll, so dass die Eltern TableViewController1 die modale Ansicht entlässt anstatt die MyModalClass selbst anzuzeigen.
  • Geben / Entlassung des modalen Blick auf TableViewController1.splitViewController macht eigentlich alles noch schlimmer. Die Ansicht scheint nicht einmal
  • Sacrificing mehrere Ziegen haben auch keine Hilfe.

Ich würde enorm schätzen jede Eingabe zu diesem Thema.

War es hilfreich?

Lösung

Ich habe eine Art-of-Antwort auf meine eigene Frage: Ich Instrumente verwendet, um systematisch alle Speicherlecks in meiner Anwendung zu beseitigen. Nachdem ich das getan hatte, das Problem verschwunden.

Andere Tipps

Ich hatte das gleiche Problem wie du, ich löste es durch programmatisch vorübergehend Kraft drehe meine präsentiert Viewcontroller (einmal zu ihm zurückgekehrt), in seiner viewDidAppear Methode zu einer beliebigen Rotation. Natürlich ohne Animation. Und dann gedreht, um ihn auf die gewünschte Orientierung zurück (was ich in vor der Rotation gespeichert).

Also, wenn VC1 Displays VC2 modal, und der Benutzer dreht VC2 ich die Ausrichtung des VC1 eingestellt nach aktueller Ausrichtung von vc2 durch den Aufruf: UIInterfaceOrientation currentOrientation = self.interfaceOrientation; // Speichere aktuelle Ausrichtung von VC2 (modal Ansicht) [VC1 willRotateToInterfaceOrientation: currentOrientation Dauer: 0];

Dann habe ich dissmiss vc2 und in viewWillAppear von VC1 ich dies tun:

- (void) viewDidAppear: (BOOL) animiert {

[super viewDidAppear:animated];

/* Store wanted orientation */
UIInterfaceOrientation currentOrientation = self.interfaceOrientation; 

/* rotate to some arbitrary orientation, this solves the bug. */
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortraitUpsideDown animated:NO]; 

[[UIDevice currentDevice] setOrientation:currentOrientation animated:NO]; //restore wanted orientation.

}

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