Autolayout und Autosizing

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

  • Autolayout und Autosizing

    Hallo,
    versuche mich an einem 10er Block der sowohl auf iphone 3,5 Zoll, 4 Zoll und 5,5 Zoll vernünftig aussieht.
    Ich weiß nicht genau ob ich auf dem richtigen Weg mit den ganzen Constraints bin. Habe für dieses Vorhaben nun min 60 solcher Constraints angelegt.
    Ich habe das Gefühl das es einfacher gehen muss.
    Habe hier mal ein Screenshot, sowie mein Machwerk angefügt.
    Würde mich über Kommentare und Anregungen freuen.
    Danke
    Dateien
  • Ich finde Autolayout für sowas auch Mühsam aber Moon hat bestimmt eine gute Lösung (Wahrscheinlich ein CollectionView ;) )

    Ich nehme für Solche Konstrukte das gute alte Autoresizing. Da sind das dann die default Einstellungen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Ich habe mir nur das Bild angesehen. Das sieht nach zu vielen Constraints aus. Für die Bearbeitung solltest Du lieber den Größeninspektor der Elemente verwenden. Xcode 6 ordnet darin die Constraints einigermaßen sinnvoll an. Du kannst auch überlegen, ob Du nicht auf beispielsweise die Abstände zwischen den Tasten verzichten kannst; die sieht man ja im Prinzip nicht.

    Und ja: Autolayout ist mühsam – aber auch cool. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Deswegen habe ich den Post geschrieben, auch mir schienen es deutlich zuviele Constraints.
    Aber mit dem Größeninspektor komme ich irgendwie garnicht klar. Dann ist der Button doch auf den 3.5 Zoll genau so groß wie auf dem 5,5 ... das soll so nicht das Ziel sein.

    Irgendwie fehlt mir bei dem Autolayout noch, die ein oder andere Option. Oder ich habe das doch nicht verstanden ..
    In meinem Beispiel das der 10er Block unten eben 40 % des Scherens einholen soll.
  • Ich fange zwar gerade erst mit Auto Layout an, aber vom Autosizing kommend würde ich über ein Spalten Layout an die Sache heran gehen. Sprich die jeweiligen Buttons einer Spalte in einen View packen.

    Die Buttons in dem jeweiligem Spalten View erhalten dann die Breite des Views. Die Spalten Views hängen dann ggf. in einem Superview und orientieren sich an dessen Breite.

    Damit sollten sich einige Constraints "sparen" lassen.
  • MCDan schrieb:

    Damit sollten sich einige Constraints "sparen" lassen.

    Da würde ich nicht drauf wetten: Du brauchst für jeden View mindestens 4 Constraints, sofern er keine natürliche Größe hat. Der View im Bild braucht also mindestens 64 Constraints.

    Trotzdem sollte der Ansatz mit den Spalten das Anlegen der Constraints stark vereinfachen. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Der "Faktor" heißt in Xcode "Multiplier" und den kann man bei dem jeweiligen Constraint einstellen.

    Und kannst Du nicht mit Alignment-Constraints eine Menge Arbeit sparen (Ich hab's aber nicht ausprobiert). Du kannst doch mehrere Views selektieren und dann auf einmal ein Alignment-Constraint setzen und so z.B. die einzelnen Tasten horizontal und vertikal ausrichten. Evtl. geht's wenn Du z.B. eine Taste einer Reihe (oder Zeile) entsprechend anpinnst und die anderen mit einem Alignment-Constraint setzt? Nur so als Anregung.

    Ja, Autolayout kann eine Menge Arbeit machen, vor allem wenn man später an den View nochmal ran muss und etwas "rumzupft". Allerdings gibt's halt Sachen, die nur mit Autolayout gehen

    ciao

    gandhi
  • macmoonshine schrieb:

    MCDan schrieb:

    Damit sollten sich einige Constraints "sparen" lassen.

    Da würde ich nicht drauf wetten: Du brauchst für jeden View mindestens 4 Constraints, sofern er keine natürliche Größe hat. Der View im Bild braucht also mindestens 64 Constraints.

    Trotzdem sollte der Ansatz mit den Spalten das Anlegen der Constraints stark vereinfachen. ;)

    Ich hatte es so verstanden, dass Xcode 5 beim Build fehlende Constraints in Form von automatic constraints automatisch hinzufügt. Da sich die Buttons in den Spalten Views nur in der Breite an den Superview anpassen, müsste man doch nur die Constraints für die Equal Widths anlegen. Die Constraints für den Horizontal und Vertical Space sollte Xcode beim Build dann automatisch erzeugen, oder habe ich dies falsch verstanden?
  • Xcode erzeugt beim Build Constraints? Das ist mir neu...

    Wie dem auch sei: Wenn man den Interface-Builder fehlende Constraints erzeugen lässt, kommt in der Regel nicht das raus, was man erwartet. Alles andere wäre auch überraschend. Passende Constraints für ein Layout festzulegen, ist ja auch für einen Rechner ein viel zu komplizierter Vorgang.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich habe dies in einem Tutorial von Ray Wenderlich bzw. Matthijs Hollemans gelesen.

    Beginning Auto Layout Tutorial in iOS 7​

    ​If you don’t supply any constraints at all, Xcode automatically assigns a set of default constraints, known as the automatic constraints. It does this at compile time when your app is built, not at design time. Auto Layout in Xcode 5 works hard to stay out of your way while you’re designing your user interfaces, and that’s just how we like it.

    The automatic constraints give your views a fixed size and position. In other words, the view always has the same coordinates as you see in the storyboard. This is very handy because it means you can largely ignore Auto Layout. You simply don’t add constraints if the default ones are sufficient and only create constraints for those views that need special rules.