AutoLayout bringt mich zum Verzweifeln - Button oben rechts, Button oben links - Relative Breite nicht möglich?

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

  • AutoLayout bringt mich zum Verzweifeln - Button oben rechts, Button oben links - Relative Breite nicht möglich?

    Ich bin kurz davor mein unschuldiges Macbook aus dem Fenster zu werfen.

    Ich habe eine ganz einfache Aufgabe. Eigentlich.
    Ich habe eine iPad fokussierte App. Ausschliesslich Landscape
    Diese soll auch auf dem iPhone laufen.
    Ich habe einen UIButton als Leiste links oben. Ich habe einen UIButton als Leiste rechts oben. Ich habe einen UIButton als Logo-Halterung in der Mitte. Screenshot ist anbei.
    Ich kann den linken Button oben links antackern. Das mache ich indem ich im Storyboard rechts unten auf "new Constraint" klicke, dann die roten Dinger für links und oben anklicke. Constraint hinzufügen. Passt.
    Selbiges für die Leiste rechts oben. Den mittleren Button für das Logo habe ich vertikal oben angetackert.

    Jetzt kommen aber die Probleme:

    1. Von dem mittleren Button ziehe ich per Control-Klick eine blaue Linie in den View. Dann stelle ich "Center horizontally in safe area" ein. Das reicht Xcode aber nicht und ich bekomme einen roten Rahmen. Es sieht so aus als würde Xcode mich zwingen eine feste Width einzugeben. Also mache ich das. Ich will aber keine feste Width. Ich will dass die Width beim iPad weiter ist als beim iPhone. Ich will also keine px-width, sondern eine %-width. Das scheint nicht zu gehen?

    2. Das viel nervigere Problem: Die Balken überschneiden sich in der iPhone Ansicht, da sie ja die breite der iPad Ansicht haben, da es ja primär eine iPad App sein soll. Ich will dass die Balken aka Buttons links und rechts oben sich in der iPhone Ansicht automatisch verkleinern. Also auch hier will ich eine %-width und keine px-width. Das scheint nicht zu gehen?

    Gibt es wirklich keine %-width? Das wäre sooooo viel einfacher. Linker und rechter Balken fest in die Ecken getackert. Breite auf 35% gestellt. Mittlerer Button in die Mitte getackert, Breite auf 10% gestellt. Und ich hätte auf jedem Gerät immer die genau gleiche Ansicht. Genau das will ich!

    Wie zum Teufel löse ich das? Bitte bewahrt mein Macbook vor einem Flug aus dem Fenster!! :)

    Bildschirmfoto 2017-11-28 um 15.53.58.pngBildschirmfoto 2017-11-28 um 16.12.09.png

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von casualcoder ()

  • casualcoder schrieb:

    1. Von dem mittleren Button ziehe ich per Control-Klick eine blaue Linie in den View. Dann stelle ich "Center horizontally in safe area" ein. Das reicht Xcode aber nicht und ich bekomme einen roten Rahmen. Es sieht so aus als würde Xcode mich zwingen eine feste Width einzugeben. Also mache ich das. Ich will aber keine feste Width. Ich will dass die Width beim iPad weiter ist als beim iPhone. Ich will also keine px-width, sondern eine %-width. Das scheint nicht zu gehen?
    Versuche mal eine Equal Width Constraint zum Superview zu erstellen. Über den Multiplier Wert kannst Du dann die gewünschte Größe für den Button instellen. Wenn sich jetzt die Width des Superviews ändert (iPad vs. iPhone) dann passt sich auch die Width des Button analog an. Wenn Du dann auch noch eine Aspect Ratio Constraint von 1:1 setzt, dann bleibt der Button immer quadratisch. ;)

    Die Breite der Balken sollte sich auch über eine Equal Width Constraint zum Superview und einem passenden Multiplier Wert realisieren lassen.

    Habe dies gerade mal ausprobiert und es funktioniert wunderbar.

    Alternativ kannst Du auch einen festen Abstand zwischen Balken und mittleren Button wählen. Dies hat aber zur Folge, dass der Abstand dann immer gleich ist, egal wie groß der Superview ist. Die Equal Width Constraint zum Superview mit passendem Multiplier scheint mir da die bessere Lösung zu sein, da die Breite des Balken dann immer passend zur Breite des Superviews gesetzt wird. Wenn Dir der Abstand zwischen Balken und mittleren Button auf dem kleinsten iPhone damit zu klein wird, dann kannst Du noch einen Constraint für den Abstand mit einer >= Konstante verwenden. Da musst Du dann einfach mal experimentieren, was Dir besser gefällt. ;)