Wie kann man die Abmessungen des Bildschirms in iOS erhalten?
Das Problem mit dem von Ihnen geposteten Code besteht darin, dass Sie auf die Ansichtsgröße zählen, die der des Bildschirms entspricht, und wie Sie gesehen haben, ist dies nicht immer der Fall. Wenn Sie die Bildschirmgröße benötigen, sollten Sie sich das Objekt ansehen, das den Bildschirm selbst darstellt:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Update für geteilte Ansicht: In Kommentaren fragte Dmitry:
Wie kann ich die Größe des Bildschirms in der geteilten Ansicht ermitteln?
Der oben angegebene Code gibt die Größe des Bildschirms an, auch im geteilten Bildschirmmodus. Wenn Sie den geteilten Bildschirmmodus verwenden, ändert sich das Fenster Ihrer App. Wenn der obige Code nicht die erwarteten Informationen enthält, sehen Sie wie beim OP das falsche Objekt. In diesem Fall sollten Sie jedoch das Fenster anstelle des Bildschirms wie folgt betrachten:
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
Swift 4.2
let screenRect = UIScreen.main.bounds
let screenWidth = screenRect.size.width
let screenHeight = screenRect.size.height
// split screen
let windowRect = self.view.window?.frame
let windowWidth = windowRect?.size.width
let windowHeight = windowRect?.size.height
[UIScreen scale]
.CGRectGetWidth()
undCGRectGetHeight()
nicht direkt darauf zugreifen solltensize
. Ich denke nicht, dass es jemals ein Problem in Bezug auf das Bildschirmrechteck sein wird, aber ich nehme an, dass es etwas ist, das man beachten sollte.Achtung, [UIScreen mainScreen] enthält auch die Statusleiste. Wenn Sie den Rahmen für Ihre Anwendung abrufen möchten (ohne Statusleiste), sollten Sie ihn verwenden
quelle
return [[UIScreen mainScreen] bounds].size.width;
Ich habe einige der oben genannten Objective-C-Antworten in Swift-Code übersetzt. Jede Übersetzung wird mit einem Verweis auf die ursprüngliche Antwort fortgesetzt.
Hauptantwort
Einfache Funktionsantwort
Antwort zur Geräteorientierung
Antwort protokollieren
quelle
return UIScreen.mainScreen().bounds].size.width
Ich habe diese praktischen Methoden bereits verwendet:
quelle
Mir ist klar, dass dies ein alter Beitrag ist, aber manchmal finde ich es nützlich, Konstanten wie diese zu definieren, damit ich mir darüber keine Sorgen machen muss:
Die obige Konstante sollte unabhängig von der Ausrichtung des Geräts die richtige Größe zurückgeben. Dann ist das Abrufen der Abmessungen so einfach wie:
quelle
Es ist sehr, sehr einfach Ihr Gerät Größe zu erhalten sowie Berücksichtigung der Orientierung:
quelle
UIAlertView
fügt sich als rootViewController-Ansicht des keyWindow ein. Ich habe eine Logik, die den Eckfall vermeidet, da der Benutzer bei aktivierter Alarmansicht nicht mit der Tastatur interagieren kann, sodass zu diesem Zeitpunkt normalerweise kein Tastaturrahmen erforderlich ist.Wir müssen auch die Ausrichtung des Geräts berücksichtigen:
quelle
quelle
Hier habe ich für Swift 3 aktualisiert
applicationFrame ist von iOS 9 veraltet
In schnell drei haben sie entfernt () und sie haben einige Namenskonventionen geändert, Sie können hier Link verweisen
quelle
Die moderne Antwort:
Wenn Ihre App die geteilte Ansicht auf dem iPad unterstützt, wird dieses Problem etwas kompliziert. Sie benötigen die Fenstergröße, nicht die des Bildschirms, der 2 Apps enthalten kann. Die Größe des Fensters kann auch während des Betriebs variieren.
Verwenden Sie die Größe des Hauptfensters der App:
Hinweis: Die oben beschriebene Methode kann einen falschen Wert erhalten, bevor das Fenster beim Start zum Schlüsselfenster wird. Wenn Sie nur Breite benötigen, wird die folgende Methode sehr empfohlen :
Die alte Lösung verwendet
UIScreen.main.bounds
die Grenzen des Geräts zurück. Wenn Ihre App im geteilten Ansichtsmodus ausgeführt wird, werden die falschen Abmessungen angezeigt.self.view.window
In der heißesten Antwort kann die Größe falsch sein, wenn die App 2 oder mehr Fenster enthält und das Fenster klein ist.quelle
Nutzen Sie diese
Structs
, um nützliche Informationen zum aktuellen Gerät in Swift 3.0 zu erhaltenquelle
Wenn Sie die Bildschirmbreite / -höhe unabhängig von der Geräteausrichtung wünschen (nur für die Größenanpassung im Hochformat geeignet), werden Controller im Querformat gestartet:
quelle
Hier ist ein schneller Weg, um Bildschirmgrößen zu erhalten:
Diese sind standardmäßig enthalten in:
https://github.com/goktugyil/EZSwiftExtensions
quelle
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
quelle
schnell 3.0
für die Breite
Für höhe
quelle
Sie können diese Makros in Ihre PCH-Datei einfügen und mit "SCREEN_WIDTH" an einer beliebigen Stelle im Projekt verwenden.
und "SCREEN_HEIGHT"
Anwendungsbeispiel:
quelle