Ich habe den folgenden Code sowohl in iOS 7 als auch in iOS 8 ausgeführt:
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f",
(landscape ? @"Yes" : @"No"),
[[UIScreen mainScreen] bounds].size.width,
[[UIScreen mainScreen] bounds].size.height);
Folgendes ist das Ergebnis von iOS 8:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00
Im Vergleich zum Ergebnis in iOS 7:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00
Gibt es eine Dokumentation, die diese Änderung spezifiziert? Oder ist es ein vorübergehender Fehler in iOS 8-APIs?
Antworten:
Ja, es ist orientierungsabhängig in iOS8, kein Fehler. Weitere Informationen finden Sie in Sitzung 214 der WWDC 2014: "Erweiterungen des Controllers in iOS 8 anzeigen"
Zitat aus der Präsentation:
UIScreen ist jetzt schnittstellenorientiert:
quelle
Ja, es ist orientierungsabhängig in iOS8.
Ich habe eine Util-Methode geschrieben, um dieses Problem für Apps zu beheben, die ältere Versionen des Betriebssystems unterstützen müssen.
quelle
Ja, tatsächlich hängt die Bildschirmgröße jetzt in iOS 8 von der Ausrichtung ab. Manchmal ist es jedoch erwünscht, eine Größe festzulegen, die auf die Hochformatausrichtung festgelegt ist. Hier ist, wie ich es mache.
quelle
Ja, es hängt jetzt von der Orientierung ab.
Ich bevorzuge die folgende Methode, um die Bildschirmgröße orientierungsunabhängig zu ermitteln, gegenüber einigen der obigen Antworten, sowohl weil sie einfacher ist als auch weil sie nicht von einem der Orientierungscodes abhängt (deren Status von der abhängen kann Zeitpunkt, zu dem sie aufgerufen werden) oder bei der Versionsprüfung. Möglicherweise möchten Sie das neue Verhalten von iOS 8, dies funktioniert jedoch, wenn es auf allen iOS-Versionen stabil sein muss.
quelle
Im Zusammenhang mit dieser Frage, die mein Problem gelöst hat, werden hier zwei Definitionen für die Berechnung der Bildschirmbreite und -höhe verwendet:
Wenn Sie sowohl iOS 7 als auch iOS 8 unterstützen, ist dies die beste Lösung für dieses Problem.
quelle
Sie können verwenden
nativeBounds
(orientierungsunabhängig)nativeBounds
Erkennen der Gerätehöhe:
Erkennen der Gerätebreite:
quelle
Es ist kein Fehler im iOS 8 SDK. Sie machten die Ausrichtung der Grenzflächen abhängig. Aufgrund Ihrer Frage zu einem Verweis oder einer Dokumentation zu dieser Tatsache empfehle ich Ihnen dringend
View Controller Advancements in iOS 8
, sich die 214-Sitzung der WWDC 2014 anzusehen . Der interessanteste Teil (Ihrer Zweifel nach) istScreen Coordinates
der, der um 50:45 Uhr beginnt.quelle
Ja, es ist orientierungsabhängig in iOS8.
Hier erfahren Sie, wie Sie Grenzen auf konsistente Weise in iOS 8 für SDKs und Betriebssystemversionen auslesen können.
quelle
Meine Lösung ist eine Kombination aus MaxKs und hfossli. Ich habe diese Methode in einer Kategorie von UIScreen erstellt und es gibt keine Versionsprüfungen (was eine schlechte Praxis ist):
quelle
Ich brauchte eine schnelle Hilfsfunktion, die unter iOS8 das gleiche Verhalten wie iOS7 beibehielt - so konnte ich meine
[[UIScreen mainScreen] bounds]
Anrufe austauschen und keinen anderen Code berühren ...quelle
Die folgende Methode kann verwendet werden, um die Bildschirmgrenzen für eine bestimmte Ausrichtung unabhängig von der iOS-Version zu ermitteln. Diese Methode gibt die Grenzen basierend auf der Bildschirmgröße des Geräts zurück und gibt unabhängig von der iOS-Version denselben CGRect-Wert aus.
quelle
Das habe ich verwendet, um das richtige Rect zu berechnen:
quelle
Fügen Sie einfach die schnelle Version einer hervorragenden Cbartel-Funktion hinzu, die oben beantwortet wurde.
quelle
Mein Problem bezog sich auf den UIWindows-Frame, der in Minus ging. So machte der Code wie folgt in MyViewController - (NSUInteger) unterstützteInterfaceOrientations-Methode
Und seine Arbeit für mich versuchen es.
quelle
iOS 8 oder höher
Eine Lösung für diejenigen, die die Bildschirmgröße in Punkten herausfinden möchten (3,5-Zoll-Bildschirm hat 320 × 480 Punkte, 4,0-Zoll-Bildschirm hat 320 × 568 Punkte usw.) wäre
quelle
Eine Sache, die ich bemerkt habe, ist, dass die Reihenfolge der unterstützten Schnittstellenausrichtungen in Info.plist eine Rolle spielt. Ich habe das Problem dieser Frage mit meiner App (die die Ausrichtung im Code ausführt), aber ich habe nirgendwo angegeben, dass die Standardausrichtung Porträt ist.
Ich dachte , dass Standardausrichtung war Portrait auf jeden Fall.
Durch das Neuanordnen von itens in Info.plist, wobei Portrait an erster Stelle steht, wurde das erwartete Verhalten wiederhergestellt.
quelle
Dies wird richtiges Gerät in geben iOS7 und iOS8 beide,
// Sie können auch weitere Geräte hinzufügen (ieiPad).
quelle
Verwendete leicht modifizierte Mnemia-Lösung, die ohne iOS-Versionsprüfung verwendet wurde, wobei min / max auf den Grenzen des Hauptbildschirms verwendet wurde.
Ich brauchte eine
CGRect
soCGRect
vom Hauptbildschirm entfernte und verändertesize.width=min(w,h)
,size.height=max(w,h)
. Dann habe ich diese OS-unabhängige Get-CGRect
Funktion an zwei Stellen in meinem Code aufgerufen , an denen ich die BildschirmgrößeOpenGL
, Berührungen usw. erhalten habe. Vor der Behebung hatte ich zwei Probleme - unter IOS 8.x im Querformat war die Anzeigeposition derOpenGL
Ansicht falsch: 1 / 4 des Vollbildes im linken unteren Teil. Und zweite Berührungen gaben ungültige Werte zurück. Beide Probleme wurden wie erläutert behoben. Vielen Dank!quelle