TransparentView über ein aktives View

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

  • Das Zeug aus dem Storyboard muss in viewDidLoad schon da sein.

    ViewDidAppear wäre komisch, das wird doch z.B. beim anzeigen über einen NavigationController erst am Ende der Animation ins Bild aufgerufen. ;)

    Ich würde wie Michael darauf tippen, dass Labels und Bild nicht in der selben View liegen.
    Sprich die Labels nicht im View des ViewControllers liegen in dem das Bild zugefügt wird.

    Ansonsten müsste bringSubviewToFront ja auch was bewirken.
  • Und Du hast keine Verzögerungen durch z. B. vorher stattfindende Animationen? Das wundert mich. Ich habe bisher nur still mitgelesen, habe aber den Eindruck, dass Du nur die Symptome bekämpft, nicht die Ursache Deines Problems. Kontrolliere doch einmal genau, ob die Labels wirklich Subviews Deiner ViewController-View sind, und ob Du aufgrund des Autolayouts nicht in "didLayoutSubviews" werkeln solltest ... also genau die Tipps, die hier schon gegeben wurden.

    Ciao, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Michael schrieb:

    necromonger schrieb:

    Also Problem gelöst. Hab den Code in viewDidAppear gelegt und es funktioniert. Danke für die grosse hilfe!!!!

    Die viewDidAppear: Methode hast du auch in dem selben ViewController wie die viewDidLoad Methode implementiert? Logisch ist das nicht, weil addSubview: arbeitet immer gleich, egal in welcher Methode man das macht.


    Ich hatte das Gleiche Problem bei einer App von iOS7 auf iOS8. Irgendwas wurde da geändert, so dass der Viewaufbau in viewDidLoad noch nicht komplett ist. Anscheinend wird bis dahin wirklich nur der View geladen aber noch in keinster Weise "arrangiert". Erst in viewWillLayoutSubview() wird das endgültige Layout zusammen gesetzt. Deshalb wäre das wohl auch die richtige Adresse für den addSubview des TO. viewDidLoad ist definitiv zu spät.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Wäre mal interessant, ob die Views aus dem Storyboard zu dem Zeitpunkt wirklich noch gar nicht subviews des Views sind,
    oder ob da intern dann nur noch die Z-Order danach verändert wird.

    Man findet im Netz tatsächlich einige ähnliche Probleme.

    Das richtige vorgehen wäre wohl:
    Erstellen und Hinzufügen als Subview in viewDidLoad (damit es bei Animationen beim Anzeigen nicht zu rucklern kommt),
    dann in viewDidLayoutSubviews (das System ist dann mit den eigenen Layoutänderungen durch und man ist definitiv derjenige der noch was am finalen Stand ändern kann) das Frame setzen und die Z-Order (bringSubviewToFront).

    Dann hält man sich auch an die Idee vom getrennten Laden und Positionieren der Views.
  • Thallius schrieb:

    Michael schrieb:

    necromonger schrieb:

    Also Problem gelöst. Hab den Code in viewDidAppear gelegt und es funktioniert. Danke für die grosse hilfe!!!!

    Die viewDidAppear: Methode hast du auch in dem selben ViewController wie die viewDidLoad Methode implementiert? Logisch ist das nicht, weil addSubview: arbeitet immer gleich, egal in welcher Methode man das macht.


    Ich hatte das Gleiche Problem bei einer App von iOS7 auf iOS8. Irgendwas wurde da geändert, so dass der Viewaufbau in viewDidLoad noch nicht komplett ist. Anscheinend wird bis dahin wirklich nur der View geladen aber noch in keinster Weise "arrangiert". Erst in viewWillLayoutSubview() wird das endgültige Layout zusammen gesetzt. Deshalb wäre das wohl auch die richtige Adresse für den addSubview des TO. viewDidLoad ist definitiv zu spät.

    In der Dokumentation zu viewDidLoad steht:
    This method is called after the view controller has loaded its view hierarchy into memory.

    Die View Hierarchie ist also vollständig geladen. Die Views mögen noch nicht an ihrem richtigen Platz liegen, aber die Beziehungen Superview<->Subviews stehen fest. Auch die Reihenfolge der Subviews entspricht der im Storyboard. Es wäre schlimm, wenn diese Reihenfolge beim Laden des Views zufällig ausgewürfelt werden würde, weil man dann bei einem User Interface mit überlappenden Views nicht das bekommt, was man im Interface Editor angelegt hat.
    Das angehängte Projekt zeigt auch, dass es in viewDidLoad funktioniert.
    Dateien
    • Foo.zip

      (12,88 kB, 169 mal heruntergeladen, zuletzt: )