View-Hierarchie nachträglich ändern

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

  • View-Hierarchie nachträglich ändern

    Hallo zusammen!

    Seit langem arbeite ich an einer App, deren Hauptview mehrere Eingabefelder bietet.
    Die Zahl ist nun einmal wieder gewachsen. Zudem teste ich die App nun auch mit
    anderen Schriftgrößen. Dadurch kommt es nun zu dem typischen Problem, dass das
    gewählte Eingabefeld von der Tastatur verdeckt wird.

    Ich habe nun versucht, dem Tipp von Mattes in App nachträglich mit ScrollView versehen
    zu folgen. Ich scheitere aber eigentlich schon beim Anfang, denn durch das Ändern der
    Hierarchie verändern sich die Views immer in einer unerwünschten Weise: sie werden
    schmaler als bisher. Nun kann ich aber die Breite nicht mehr ändern.

    Konkret habe ich ein vertical StackView mit 8 horizontal StackViews, die Labels und die
    eigentlichen Eingabefelder enthalten. Die Constraints sind so angelegt, dass die Eingabefelder
    bündig untereinander stehen und bis zum rechten Rand reichen (mit Ausnahmen).
    Das funktioniert eigentlich recht gut auch mit unterschiedlichen Schriftgrößen.

    Nun nehme ich das vertical StackView und rufe im Interface Builder 'embed in' View auf.
    Und schon ist die Breite der vertical StackView kleiner als zuvor und nicht mehr änderbar.
    Das Problem tritt aber auch auf, wenn ich ein View anlege und die existierenden in der
    hierarchischen Ansicht hineinschiebe.

    Gibt es da einen Trick, der es ermöglicht, die Breite änderbar zu belassen? Oder muss
    ich eventuell ganz anders vorgehen?

    Grüße
    Marco
  • Wenn Du bei dem Stack View "Embed in View" auswählst, dann gehen leider die Layout Constraints vom Stack View zum bisherigen Parent View verloren.

    Wenn Du diese wieder entsprechend setzt, dann sollte wieder alles passen. Leider hapert das Handling mit Layout Constraints im IB immer noch, so dass dieser gerne mal das komplette Layout zerschiesst, während man versucht die Layout Constraints neu zu setzen. X(

    "Embed in View" setz auch automatisch einen Abstand des Views zum neuen Parent View. Versuche es daher auch mal mit "Embed in View Without Insets".

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • Danke für die Antwort, MCDan.
    In den vergangenen Tagen hatte ich ein Rückmeldung meinerseits immer wieder aufgeschoben,
    weil andere Dinge im Weg waren. Nun versuche ich ein paar Details zu ergänzen.

    Mein konkretes Szenario war leicht komplexer: unterhalb der StackView waren weitere Views.
    Aufgrund des oben schon genannten Beitrags wollte ich zuerst die StackView und die weiteren
    Views zusammen in eine View packen und dann in eine ScrollView.

    Nach dem Schreiben des obigen Beitrags hatte ich noch einen anderen Ansatz probiert: die
    weiteren Views nach Inhalt gruppieren und dann als eine weitere View in meine StackView
    ergänzen und diese danach in eine ScrollView. Das klappte dann interessanterweise. Also
    ist es möglicherweise vorteilhaft, eine StackView in eine ScrollView zu betten anstatt eine View,
    die nur ein Container für mehrere andere Views ist. Vielleicht hätte es aber auch funktioniert,
    bestimmte Eigenschaften der View zu ändern.

    Ich hatte auch den Verdacht, dass es evtl. nur ein Fehler in Xcode ist, dass das nicht funktioniert.
    Daher hatte ich es auch mehrfach versucht und auch zwischendrin Xcode neu gestartet. Aber
    nichts half. Auch bei einem frisch erstellten Testprojekt mit nur einem ViewController verhielt
    Xcode sich so.