AutoLayout: Von iPad auf iPhone oder von iPhone auf iPad? Oder auch: Wie schrumpfe ich meine View/GUI?

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

  • AutoLayout: Von iPad auf iPhone oder von iPhone auf iPad? Oder auch: Wie schrumpfe ich meine View/GUI?

    Hallo.

    Ich bastel gerade an einer iOS App, welche primär auf dem iPad genutzt werden soll. Für den Notfall soll sie aber auch auf dem iPhone laufen. Den Design-Prozess habe ich auf dem 9.7 Zoll iPad begonnen, funktioniert im Simulator auch super. Auf meinem iPad ebenso.
    Wenn ich die Ansicht nun aber auf iPhone7 oder 7 Plus ändere, dann verkleinert sich logischerweise der "Rahmen", aber die Elemente darin nicht. Das ist natürlich ganz und gar nicht das was ich wollte. Egal welche Pfeilkombination ich unter "Autoresizing" anklicke, die Buttons bleiben gleich groß. Der gesamte View wird quasi nur beschnitten. Keines der Elemente schrumpft. Das ist aber das was ich möchte.

    Daher nun meine Frage: Wie gehe ich dabei vor? Fange ich auf dem iPhone an und lasse die Buttons dann ins größere Format (iPhone Plus, iPad, iPad 12, etc...) auto-resizen?
    Oder geht dies auch auf dem Weg wie ich das nun mache? Auf dem iPad designen (iPad ist ja schliesslich auch die Hauptplattform) und dann shrinken/schrumpfen lassen?

    Ich brauche auch keine Step-by-Step Anleitung. Lediglich ein paar Stichpunkte die ich googlen kann, Hinweise und vor Allem Tipps zu best practices. Der Fokus soll darauf liegen soviel nur möglich mit dem Interface Builder zu machen. Und so wenig wie möglich per Code.
  • Soweit bin ich noch gar nicht. :)

    Zur Info: Meine App ist Landscape only. Bei iPad als auch iPhone.
    Ich habe oben in meiner App zwei Buttons die jeweils 50% der Breite benutzen, so dass es aussieht wie eine Leiste. (Und sie machen natürlich auch was. Einer verweist auf den Einstellungs-View, der andere auf einen nochmal anderen View) Jetzt würde man ja meinen, dass diese zwei Buttons in der iPhone Ansicht einfach schrumpfen und schmaler werden. Bzw sogar noch etwas an Höhe verlieren, da das iPhone in der Landscape-Ansicht ja auch nicht so hoch ist wie das iPad (Ratio 3:4 fürs iPad und Ratio 9:16 fürs iPhone)

    Wenn ich aber nun von iPad-Ansicht auf iPhone-Ansicht wechsle, passiert gar nichts. Das ganze wird nur beschnitten. Die beiden Buttons oben, die meine "Leiste" bilden bleiben einfach genau so lange und genau so groß wie in der iPad Ansicht. Sprich die App sieht man gar nicht mehr komplett.

    Was ich aber möchte ist, dass sie weiterhin jeweils 50% der Gesamtbreite abdecken. Und wenn man's genau nimmt auch in der Höhe schmäler werden.

    Ist das denn überhaupt so einfach? Die Autosizing Funktion im IB scheint daran nichts zu ändern. Egal welche Pfeile/Abstandshalter ich anwähle.

    Zu welcher Thematik muss ich mich also bei Youtube/Google schlau machen? Präferiert wird, möglichst viel im IB zu machen und möglichst wenig Code zu benutzen.
  • Als Daumen-Regel: Siehe zu, dass Du für jedes UI-Element vier Constraints hast: Jeweils ein Paar für Position und Größe. Dann sollte es eigentlich keine bösen Überraschungen geben.

    Du kannst dabei die Breite der Schaltflächen natürlich von der View-Breite abhängig machen ... am leichtesten wahrscheinlich mit der „Visual Layout Language“, obwohl ich mich mit dieser nicht anfreunden konnte und NSLayoutConstraints lieber ganz klassisch setze: Zwei Objekte und eine „y = m * x + b“-Gleichung... :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Und gleich noch eine Frage hinterher. Es ist zwar ein anderes Thema, aber ich will das Forum hier auch nicht mit meinen Anfänger-Fragen zu-spam-en.
    Ich benutze AudioKit und möchte damit einen Ton ausgeben. Erstmal ein ganz einfacher Sinuston vom AudioKit Oszillator.

    Wenn ich mit meinem Finger auf den Button drücke, soll ein Ton zu hören sein, sobald ich den Finger wieder vom Button nehme, soll der Ton aufhören.

    Ich habe einen UIButton und dazu eine "Touch Down" Action erstellt, welche "oscillator.start()" ausführt. Dazu dann für den gleichen UIButton eine "Touch Up Inside" Action erzeugt die "oscillator.stop()" ausführt. Es funktioniert genau so wie es soll. Diese Vorgehensweise scheint mir aber etwas arg "primitiv".

    Wenn ich das mit 20 Buttons mache, dann hätte ich ja 40 IBActions allein dafür. Und müsste 40 mal diese Verbindungen vom Storyboard zum Quellcode ziehen.

    Und ja ich weiß, man kann Buttons auch programmatisch erzeugen, aber das System wäre ja für diese dann das selbe, oder? Auch programmatisch erzeugte UIButtons brauchen ja IBActions?
  • MyMattes schrieb:

    Ich persönlich fände trotzdem besser, wenn Du für neue Themen auch neue Threads öffnen würdest: Von Spammen kann da ja keine Rede sein und der Beitrag wäre bei Bedarf später leichter zu finden / zu identifizieren...

    Mattes
    Ja vielleicht hast Du doch Recht. Ich wollte nur das Forum nicht mit meinen Anfänger-Fragen überschütten. Zur nächsten Frage ist es aber sicher nicht mehr weit, dann mach ich doch wieder ein neues Thema! :)