Autolayout und Constraints

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

  • Autolayout und Constraints

    Hallo,
    so habe das mit den Constraint und Autolayout verstanden. Soweit so gut.
    Nun zu meinem Vorhaben und der bitte um Tips.
    Ich habe ein Screen der im wesentlichen 3 Teile hat
    1. ne TableView
    2. ne 2. Tableview
    3. eine Button Leiste
    Die sind übereinander angeordnet und mit Constraints versehen. Nun möchte ich, das wenn man auf den Button drückt, der 2. TableView verschwindet und sich der erste TableView bis zu der ButtonLeise vergrößert.
    Also bin ich hingegangen und habe die 2. View versucht "verschwinden zu lassen"
    self.secondView. setHidden=TRUE
    lasst zwar die View auf dem Screen verschwinden, sprich er versteckt ihn aber die Constraints greifen nicht.
    Also bin ich davon ausgegangen das der View noch da ist, aber nicht mehr angezeigt wird.
    dann habe ich versucht die größe zu verändern
    self.secondView.bounds =CGRectZero;
    Auch hier wird der 2. View nicht mehr angezeigt. Aber der 1. Tableview wird nicht bis nach unten gezogen.
    Oder kann ich das mittels Constraint gar nicht lösen ? und muss den View Manuell auf die neue Größe ziehen ?
  • Du musst die Constraints an sich ändern (bzw. deren Attribute), nicht den Frame des Views und schon gar nicht die Bounds. Du kannst das Constraint sogar animieren lassen, dann ändern die Views ihre Größe animiert. Wenn Du einen View "Hidden" setzt, änderst Du ja nix an der Größe bzw. dem Constraint. Er ist halt nur "hidden" (Wie der Name schon sagt)

    Generell gilt: Wenn Du Autolayout aktiviert hast, dient das Frame-Rechteckt nur noch zur Information.

    schönen Gruß

    gandhi
  • Am einfachsten legst Du Dir ein Outlet zu der Restriktion an, die Du ändern möchtest. Dann kannst Du deren Property constant anpassen (z. B. auf 0 setzen, um den View verschwinden zu lassen). Nach der Änderung musst Du dann noch das Layout über layoutIfNeeded aktualisieren. Wenn Du diesen Aufruf in einem Animationsblock machst, animierst Du die Änderung.
    „Meine Komplikation hatte eine Komplikation.“
  • Hallo,
    Prima ... wieder was dazu gelernt. Ich habe das mal wie folgt gelöst.
    Habe eine Constraint angelegt, der die Höhe zur SuperView und die Höhe der TableView mit Ratio 1:3 besitzt.
    Da man die Ratio nicht per Code anpassen kann ( Readonly ) musste ich die Constant Variante verwenden. Wenn das auch nicht das schickste ist. Aber was anderes fällt mir dazu nicht ein.

    Sieht dann wie folgt aus :

    Quellcode

    1. ​-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
    2. {
    3. switch (item.tag) {
    4. case 1:
    5. self.ratio.constant = 1000;
    6. break;
    7. case 2:
    8. self.ratio.constant = 2;
    9. break;
    10. case 3:
    11. self.ratio.constant = 8;
    12. break;
    13. case 4:
    14. self.ratio.constant = 0;
    15. break;
    16. default:
    17. break;
    18. }
    19. [tabBar setSelectedItem:Nil];
    20. }
    Alles anzeigen
    Dateien
    • Archiv.zip

      (27,3 kB, 282 mal heruntergeladen, zuletzt: )