Auto Layout: zwei views horizontal zentrieren (ohne diese in ein view zu packen)

  • Auto Layout: zwei views horizontal zentrieren (ohne diese in ein view zu packen)

    Hallo,

    ich möchte zwei views (zb buttons) welche zueinander einen fixen abstand haben, in einem fenster horizontal zentrieren.
    geht das nicht so einfach?

    mir ist klar, dass ich die zwei dinger in ein eigenes view packen könnte um dieses dann horizontal zentrieren zu lassen aber das ist doch etwas viel gefummel...

    irgendwelche ideeen?

    thx

    edit: noch ein screenshot hinzugefügt.
    Dateien
    • center.png

      (16,35 kB, 173 mal heruntergeladen, zuletzt: )
  • gritsch schrieb:

    ich möchte zwei views (zb buttons) welche zueinander einen fixen abstand haben, in einem fenster horizontal zentrieren.
    geht das nicht so einfach?
    Was ist denn bei dir einfach?

    gritsch schrieb:

    mir ist klar, dass ich die zwei dinger in ein eigenes view packen könnte um dieses dann horizontal zentrieren zu lassen aber das ist doch etwas viel gefummel...
    Diese Möglichkeit würde ich jetzt nicht als besonders schwer oder kompliziert bezeichnen. Alternativ könnte man auch zwischen die beiden Buttons einen zentrierten View platzieren, der dann den Abstand zwischen den Buttons bildet und die Buttons sich an diesem View ausrichten.
  • Michael schrieb:

    gritsch schrieb:

    ich möchte zwei views (zb buttons) welche zueinander einen fixen abstand haben, in einem fenster horizontal zentrieren.
    geht das nicht so einfach?
    Was ist denn bei dir einfach?

    gritsch schrieb:

    mir ist klar, dass ich die zwei dinger in ein eigenes view packen könnte um dieses dann horizontal zentrieren zu lassen aber das ist doch etwas viel gefummel...
    Diese Möglichkeit würde ich jetzt nicht als besonders schwer oder kompliziert bezeichnen. Alternativ könnte man auch zwischen die beiden Buttons einen zentrierten View platzieren, der dann den Abstand zwischen den Buttons bildet und die Buttons sich an diesem View ausrichten.
    naja, vielleicht nicht besonders schwer, es wird aber komplexer wenn man zusätzliche gruppierungs-views braucht etc.
    mit dem zwischenview-welches man zentriert und die anderen daran ausrichtet klappt nur wenn die anderen views gleich breit sind (was sie im falle von buttons ja relativ selten sind und man nicht unbedingt die gleiche breite erzwingen will).

    aber danke dass ihr es bestätigt habt (und die 10.11 lösung liegt leider noch in weiter ferne...)
  • macmoonshine schrieb:

    gritsch schrieb:

    aber danke dass ihr es bestätigt habt (und die 10.11 lösung liegt leider noch in weiter ferne...)
    Ja, leider. Zumal Xcode 7 beta noch keine Unterstützung für Layout-Guides im Interface-Builder hat. Und da sind die Layout-Guides erst richtig sinnvoll.
    da wir meist die aktuellsten 4 OS versionen unterstützen (im moment 10.8 - 10.11) wird es auch wohl noch 4 jahre dauern bis ich dieses feature einsetzen könnte ;)
  • gritsch schrieb:

    mit dem zwischenview-welches man zentriert und die anderen daran ausrichtet klappt nur wenn die anderen views gleich breit sind (was sie im falle von buttons ja relativ selten sind und man nicht unbedingt die gleiche breite erzwingen will).
    Wenn man sich zum Beispiel mal die Buttons in einem OpenPanel anschaut, sind die alle gleich breit. Und gerade wenn du zwei Buttons zentrierst, sieht das doch schief aus, wenn die unterschiedlich breit sind (die Mitte liegt dann ja auf einem der beiden Buttons). Aber das ist sicher auch eine Geschmacksfrage.
  • macmoonshine schrieb:

    Unter 10.11 gibt's die neue Klasse NSLayoutGuide dafür. Bis 10.10 einschließlich geht's nicht ohne Extra-View.
    Wieso geht das nicht? ch bin jetzt deutlich zu faul das auszuprobieren, aber wenn man die Größe fix macht, ebenso den Abstand zwischen den Buttons, müsste man doch nur ein Constraint setzen, dass der linke Rand neben dem linken Button gleich dem rechten Rand neben dem rechten Button ist.

    Oder übersehe ich etwas?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    macmoonshine schrieb:

    Unter 10.11 gibt's die neue Klasse NSLayoutGuide dafür. Bis 10.10 einschließlich geht's nicht ohne Extra-View.
    Wieso geht das nicht? ch bin jetzt deutlich zu faul das auszuprobieren, aber wenn man die Größe fix macht, ebenso den Abstand zwischen den Buttons, müsste man doch nur ein Constraint setzen, dass der linke Rand neben dem linken Button gleich dem rechten Rand neben dem rechten Button ist.
    Oder übersehe ich etwas?
    Leider gibt es keine Möglichkeit (ich sehe jedenfalls keine), so einen Constraint zu formulieren, der zwei Abstände zwischen verschiedenen Elementen gleich groß hält. Das wäre dann ja ein Constraint, der zwei andere Constraints beeinflusst.
  • Michael schrieb:

    Leider gibt es keine Möglichkeit (ich sehe jedenfalls keine), so einen Constraint zu formulieren, der zwei Abstände zwischen verschiedenen Elementen gleich groß hält.
    Du kannst keine Constraints auf die Breite von Randabständen setzen, sondern nur auf die Positionen der Rändern.


    Michael schrieb:

    Das wäre dann ja ein Constraint, der zwei andere Constraints beeinflusst.
    Explizit geht das leider nicht. Implizit kommt das wahrscheinlich andauernd vor. Die Auto-Layout-Engine sollte damit eigentlich keine Probleme haben. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Das ist kein Superconstraint, sondern eines, das ein anderes bezieht:

    Der linke Button bekommt für leading ein Constraints, dass im Wesentlichen die Hälfte der Gesamtbreite abzgl. der Breite beider Buttons ist. Damit ist der schon einmal richtig positioniert.

    Der rechte Button bekommt für trailing einfach 1 x left.leading + 0.

    Wieso sollte das nicht gehen?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Noch einmal:

    Letztlich geht es um die x-Position des rechten Buttons. Die ergibt sich aus etwas wie:

    Restplatz (den es zu verteilen gilt):

    Restplatz = (Superviewbreite - BreiteLinkerButton - BreiteRechterButton - Abstand) x 0,5

    Hierin ist alles bis auf die Superviewbreite konstant. Das kann ich also in eine Form

    Restplatz = f x Superviewbreite - k

    bringen.

    Das ist dann zugleich auch der Abstand des linken Buttons.

    Für den rechten Button …

    Ach, ist doch noch einfacher: Dem gebe ich einfach einen festen Abstand zum linken Button.

    Ich sehe immer noch nicht, warum das nicht gehen sollte.

    Der ursprüngliche Ansatz war, einfach die x-Position analog zu berechnen. Aber das brauche ich ja nicht einmal. Ist halt ein bisschen "offline-Rechnerei".
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?