Anzeigeproblem nach dem Drehen: weißer Balken erscheint

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anzeigeproblem nach dem Drehen: weißer Balken erscheint

    Hallo,

    meine Anwendung kann in jedem Dialog gedreht werden und das klappt alles einwandfrei.
    Über eine Einstellung in den Settings kann ich einstellen, ob der Aufruf anderer Views animiert werden soll oder nicht.

    Das Problem tritt nur auf, wenn ich keine Animation haben will:
    Ich bin in einem Dialog, drehe das iPhone auf Querformat und starte den nächsten Dialog.
    Das führt dazu, dass der aktuelle Dialog sich schließt.

    Quellcode

    1. [[self parentViewController] dismissModalViewControllerAnimated:shouldAnimate];


    Ohne Animation erscheint im parentViewController oben ein weißer Balken, der die Ausmaße des Statusbalkens (mit Provider, Batterieanzeige etc.) hat. Drehe ich das Handy nach rechts, habe ich sogar noch einen weißen Balken unten !

    Der ParentviewController fordert kurz Daten an und startet den nächsten Dialog:

    Quellcode

    1. [self presentModalViewController: self.xmlController animated:shouldAnimate];

    Auch hier ist dasselbe Phänomen zu sehen - mit Animation ist alles perfekt, ohne Animation kommt der Balken.

    Und das sieht dann so aus:
    [Blockierte Grafik: http://www.acut-edv.com/dvb/hcopy.jpg]

    Also muss ich irgendetwas machen, wenn ich die View wechsele - aber was ? ;(
  • Kay schrieb:

    Versuch doch mal die Statusleiste explizit auszublenden. Zum UI äußere ich mich jetzt nicht...

    OK, ohne Statusleiste geht es, aber ich darf sie nicht ausblenden.
    Gerade weil die App eine Online-Anwendung ist, die ausgiebig über das Internet kommuniziert, ist die Verbindungsanzeige zwingend erforderlich!

    Bei der Oberfläche musst du tapfer sein, hier werden gerade Formatierungen getestet... :D

    Im Ürigen geht [self wantsFullScreenLayout];

    leider auch nicht
  • Kay schrieb:

    Wie ist denn der Frame Deines Views? Der ist nämlich nicht richtig positioniert...
    Na, wenn der immer passt, sobald ich die Animation aktiviere, kann der doch gar nicht falsch positioniert sein, oder ?
    Jeder Dialog für sich ist ja auch OK; ich kann ihn drehen wie ich will und alles stimmt.
    Erst wenn eine View beendet und die nächste wieder sichtbar wird, verrutscht auch die Darstellung.

    MCDan schrieb:

    wantsFullScreenLayout ist ja auch ein Property, welches Du im ViewController auf YES setzen solltest, wenn der View des ViewControllers den kompletten Screen verwenden soll.
    Hab ich ja auch nur mal ausprobiert :whistling:
  • Kay schrieb:

    Ein bisschen mehr als 2 Zeilen Code helfen vielleicht...
    Ich bin nicht so sicher, aber versuchen wir es!

    Während der Anzeige eines Dialoges kann man z.B. eine Auswahlliste aufrufen:

    Quellcode

    1. -(void)clickedComboBox:(id)sender {
    2. XmlData *myXmlData = [[BIS_Common sharedInstance] lastXmlData];
    3. XmlFeld *myXmlFeld = [myXmlData getFeldByObject:sender];
    4. aktiveComboBox = (UIButton*) sender;
    5. if (comboboxController != nil) {
    6. [comboboxController dealloc];
    7. }
    8. comboboxController = [ComboBoxController comboBoxWithData:myXmlFeld.lWerte mitTitel:myXmlFeld.sName mitVorgabe:[aktiveComboBox currentTitle]];
    9. [comboboxController retain];
    10. comboboxController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    11. [self presentModalViewController:comboboxController animated:[[BIS_Common sharedInstance] shouldAnimate]];
    12. }
    Alles anzeigen



    Das gleiche passiert, wenn ich diese Auswahlliste drehe und dann die View schließe:

    Quellcode

    1. -(void)doClose {
    2. [[self parentViewController] dismissModalViewControllerAnimated:[[BIS_Common sharedInstance] shouldAnimate]];
    3. }



    Die View mit der Auswahlliste besteht aus (von oben nach unten) 2 Labeln, eine TableView und 2 Buttons nebeneinander. (Ist also sehr übersichtlich ;)

    Wie gesagt, ich kann jede View meiner App stundenlang drehen und alles ist perfekt!
    Nur wenn man nach der Rotation die aktive View schließt oder eine andere aufruft, erscheint der störende Balken.

    Zu meiner Überraschung kommt er auch, wenn ich das iPhone um 180° drehe. Offensichtlich wird also zunächst die Statusleiste dort positioniert, wo "normalerweise" oben ist, dann wird die View aufgebaut und der zu Beginn reservierte Bereich bleibt leer.
    Dazu passt ja, dass nach Ausblenden der Statusleiste auch kein störender Balken mehr zu sehen ist.

    Ich begreife aber auch nicht, warum die Animation beim Öffnen und Schließen die Darstellung ändert.
    Da kann doch zum Ende ein Neuzeichnen oder Refresh o.ä. aufgerufen werden. Wenn ich diesen Aufruf wüsste, dürfte der Balken verschwinden.
  • MCDan schrieb:

    Warum zeigst Du die ViewController per presentModalViewController:animated: an.

    Zeigst Du immer nur einen ViewController modal zum RootViewController an, oder zeigen die modalen ViewController evtl. weitere ViewController modal an?
    Weil ich es so aus Übungsanwendungen aus Büchern übernommen habe . :S
    Ist das nicht richtig so ?


    Das Phänomen beginnt schon beim Übergang vom RootViewController zur nächsten View.
    Die ruft später in der Tat eine weitere View modal auf. Normalerweise geht es dann wieder zurück und nach dem Laden wird die nächste View erstellt und gezeigt.
    Alle Aufrufe mache ich mit presentModalViewController:animated:
  • MCDan schrieb:

    Wenn ich mich jetzt nicht irre, dann gibt es Probleme wenn man in einem modalen ViewController einen weiteren ViewController modal anzeigt.

    Hast Du mal geprüft, ob Du evtl. einen NavigationController für die Anzeige der ViewController verwenden kannst?
    Nein, habe ich noch nicht geprüft.
    Allerdings glaube ich, der Fehler ist woanders, denn er taucht ja bereits bei der ersten modalen View auf.
    Das sollte doch in jedem Fall gehen, oder ist der RootViewController bereits der erste modale Controller ?

    Doch selbst dann bleibt ja noch die Sache mit der Animation...

    Aber schon einmal vielen Dank für deine Hilfe !!