2016-04-02 10 views
1

Ich weiß, diese Frage scheint passen eine der alte Schule ein, zu sein, aber ich kann eine nette Antwort darauf nicht finden, gibt es die Sache:Wie unterschiedliche Bildschirmgrößen in ios

Die logischen Bildschirmauflösungen für iPhone5, iPhone6 ​​und iPhone6 ​​+:

iPhone5 320 x 568 
iPhone6 375 x 667 
iPhone6+ 414 x 736 

sei angenommen, dass I einen quadratischen Oberflächenelement in der Mitte des Bildschirms haben, und es gibt drei Möglichkeiten, seine Breite (& Höhe) über verschiedene Geräte zu beschränken:

  1. width konstant
  2. width/screen.width konstant ist
  3. screen.width - width

diese drei verschiedenen Arten von Ergebnis in drei verschiedenen Erscheinungen beschränke konstant ist:

Picture 1: 3 different appearances

Ich denke, die zweite Art von Zwang (dh mittlere Spalte in der Picture 1) ist am natürlichsten aus der Sicht des Designers, aber es ist am wenigsten natürlich aus der Sicht des Programmierers. Ich muss den Gerätetyp überprüfen und Abmessungen berechnen und verschiedene Bilder für verschiedene Geräte verwenden (Auto-Layout kann in diesem Fall nicht helfen)

Der erste Weg scheint sehr natürlich zu implementieren, aber es saugt in der Praxis, vor allem im Umgang mit Textschrift Größen.

3. muss auch beurteilen, welches Bild programmgesteuert verwendet werden soll, da drei UI-Elemente in drei verschiedenen Geräten nicht mit den einfachen Skalierungsfaktoren @x2@x3 übereinstimmen.

Gibt es irgendwelche Arbeiten um die zweite Art der Zwangsführung zu implementieren?

+0

Das UI-Element die richtigen Nachteile benötigt traints - keine Bildschirmwerte fest codieren. '1)' Fügen Sie horizontale und vertikale Mitteleinschränkungen hinzu (dadurch bleibt es zentriert). '2)' Fügen Sie dem Quadrat eine width = height ein (dadurch wird es zu einem Quadrat). '3)' Fügen Sie dem Quadrat eine Breite = Anteil der Superview-Einschränkung hinzu (dies ergibt eine Breite und eine Höhe basierend auf der Bildschirmgröße ohne fest codierte Bildschirmwerte und funktioniert für alle Geräte). –

Antwort

0

Wenn Sie Storyboard verwenden, können Sie ganz einfach den 2. Weg berechnen, den Sie wollen. Sie können eine proportionale Breite mit dem Superview angeben. Wie Sie in der image sehen können, können Sie Ihren Ansichten Multiplikator geben. Oder Sie können eine Breite Einschränkung in Ihrem Code erstellen wie:

@IBOutlet weak var widthConstraint: NSLayoutConstraint! 

und Sie können Ihre Einschränkung in Ihrem Code aktualisieren.

+0

Vielen Dank für Ihre schnelle Antwort. Das Storyboard hilft nicht bei der Bildauswahl, nehme an, dass "multiplier = 0.5", dann brauche ich '160x160px' image für iphone5 und' 187.5x187.5px' image für iphone6 ​​ –

+0

Wenn du das Bild mit den Größen '@x hinzufügst ',' @ 2x' und '@ 3x' müssen Sie keine andere Größe des Bildes hinzufügen. – ridvankucuk

+0

Und was kann ich für die Schriftgröße tun? –

1

Sie können Horizontal nur in Containern und vertikal in Container-Constraints angeben, um anzuzeigen, welche in der Mitte ist, wenn ViewController und falls erforderlich, geben Sie dann Höhe und Breite der View selbst.

0

#define IS_IPAD die Nutzung Makro (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

#define IS_RETINA ([[UIScreen mainscreen ] scale]> = 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] Grenzen) .size.Breite)

#define SCREEN_HEIGHT ([[UIScreen mainscreen] Grenzen] .size.height)

#define SCREEN_MAX_LENGTH (MAX (SCREEN_WIDTH, SCREEN_HEIGHT))

#define SCREEN_MIN_LENGTH (MIN (SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE & & SCREEN_MAX_LENGTH < 568,0)

#define IS_IPHONE_5 (IS_IPHONE 0.123.& SCREEN_MAX_LENGTH == 568,0)

#define IS_IPHONE_6 (IS_IPHONE & & SCREEN_MAX_LENGTH == 667,0)

#define IS_IPHONE_6P (IS_IPHONE & & SCREEN_MAX_LENGTH == 736,0)

if (IS_PHONE_5) {// TODO}

if (IS_PHONE_6) {// TODO}