どうやってiOSの画面の大きさを知ることができますか?
現在、私は使用します:
lCurrentWidth = self.view.frame.size.width;
lCurrentHeight = self.view.frame.size.height;
viewWillAppear:
とwillAnimateRotationToInterfaceOrientation:duration:
に
初めて画面全体のサイズを取得します。二度目私は画面マイナスナビゲーションバーを取得します。
どうやってiOSの画面の大きさを知ることができますか?
あなたが投稿したコードの問題点は、画面のサイズと一致するようにビューサイズを頼りにしているということです。これまで見てきたように、必ずしもそうとは限りません。画面サイズが必要な場合は、次のように画面自体を表すオブジェクトを見てください。
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
分割ビュー用に更新: コメントでは、Dmitryは尋ねた:
分割表示の画面サイズはどのようにして取得できますか?
上記のコードは、分割画面モードであっても画面のサイズを報告します。分割画面モードを使用すると、アプリのウィンドウが変わります。上記のコードで期待した情報が得られない場合は、OPのように、間違ったオブジェクトを見ていることになります。ただし、この場合は、次のように画面ではなくウィンドウを見てください。
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
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 mainScreen]にはステータスバーも含まれています。アプリケーションのフレームを取得する場合は(ステータスバーを除く)、使用する必要があります。
+ (CGFloat) window_height {
return [UIScreen mainScreen].applicationFrame.size.height;
}
+ (CGFloat) window_width {
return [UIScreen mainScreen].applicationFrame.size.width;
}
上記のObjective-Cの回答の一部をSwiftのコードに翻訳しました。各翻訳は元の答えへの参照で進められます。
let screen = UIScreen.main.bounds
let screenWidth = screen.size.width
let screenHeight = screen.size.height
func windowHeight() -> CGFloat {
return UIScreen.mainScreen().applicationFrame.size.height
}
func windowWidth() -> CGFloat {
return UIScreen.mainScreen().applicationFrame.size.width
}
var screenHeight : CGFloat
let statusBarOrientation = UIApplication.sharedApplication().statusBarOrientation
// it is important to do this after presentModalViewController:animated:
if (statusBarOrientation != UIInterfaceOrientation.Portrait
&& statusBarOrientation != UIInterfaceOrientation.PortraitUpsideDown){
screenHeight = UIScreen.mainScreen().applicationFrame.size.width
} else {
screenHeight = UIScreen.mainScreen().applicationFrame.size.height
}
let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
println("width: \(screenWidth)")
println("height: \(screenHeight)")
私は以前にこれらの便利な方法を使用しました:
- (CGRect)getScreenFrameForCurrentOrientation {
return [self getScreenFrameForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}
- (CGRect)getScreenFrameForOrientation:(UIInterfaceOrientation)orientation {
CGRect fullScreenRect = [[UIScreen mainScreen] bounds];
// implicitly in Portrait orientation.
if (UIInterfaceOrientationIsLandscape(orientation)) {
CGRect temp = CGRectZero;
temp.size.width = fullScreenRect.size.height;
temp.size.height = fullScreenRect.size.width;
fullScreenRect = temp;
}
if (![[UIApplication sharedApplication] statusBarHidden]) {
CGFloat statusBarHeight = 20; // Needs a better solution, FYI statusBarFrame reports wrong in some cases..
fullScreenRect.size.height -= statusBarHeight;
}
return fullScreenRect;
}
これは古い投稿であることを私は認識していますが、時々私はそれを心配する必要はないのでこれらのような定数を#defineするのが役に立つと思います:
#define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size
上記の定数は、デバイスの向きに関係なく正しいサイズを返します。それから次元を得ることは同じくらい簡単です:
lCurrentWidth = DEVICE_SIZE.width;
lCurrentHeight = DEVICE_SIZE.height;
それはあなたのデバイスサイズを取得するのは非常に、非常に簡単です 同様に オリエンテーションを考慮に入れてください:
// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow]
rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
デバイスの向きも考慮する必要があります。
CGFloat screenHeight;
// it is important to do this after presentModalViewController:animated:
if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortraitUpsideDown){
screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
}
else{
screenHeight = [UIScreen mainScreen].applicationFrame.size.width;
}
NSLog(@"%.0f", [[UIScreen mainScreen] bounds].size.width);
NSLog(@"%.0f", [[UIScreen mainScreen] bounds].size.height);
ここで私は Swift 3 について更新しました
applicationFrame iOS 9から非推奨
Swift 3では、これらは削除され()、命名規則がほとんど変更されていません。ここで参照することができます リンク
func windowHeight() -> CGFloat {
return UIScreen.main.bounds.size.height
}
func windowWidth() -> CGFloat {
return UIScreen.main.bounds.size.width
}
Swift 3.0の現在のデバイスに関する有用な情報を知るためにこれらのStructs
を利用してください
struct ScreenSize { // Answer to OP's question
static let SCREEN_WIDTH = UIScreen.main.bounds.size.width
static let SCREEN_HEIGHT = UIScreen.main.bounds.size.height
static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}
struct DeviceType { //Use this to check what is the device kind you're working with
static let IS_IPHONE_4_OR_LESS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
static let IS_IPHONE_SE = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
static let IS_IPHONE_7 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
static let IS_IPHONE_7PLUS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
static let IS_IPHONE_X = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 812.0
static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
}
struct iOSVersion { //Get current device's iOS version
static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue
static let iOS7 = (iOSVersion.SYS_VERSION_FLOAT >= 7.0 && iOSVersion.SYS_VERSION_FLOAT < 8.0)
static let iOS8 = (iOSVersion.SYS_VERSION_FLOAT >= 8.0 && iOSVersion.SYS_VERSION_FLOAT < 9.0)
static let iOS9 = (iOSVersion.SYS_VERSION_FLOAT >= 9.0 && iOSVersion.SYS_VERSION_FLOAT < 10.0)
static let iOS10 = (iOSVersion.SYS_VERSION_FLOAT >= 10.0 && iOSVersion.SYS_VERSION_FLOAT < 11.0)
static let iOS11 = (iOSVersion.SYS_VERSION_FLOAT >= 11.0 && iOSVersion.SYS_VERSION_FLOAT < 12.0)
static let iOS12 = (iOSVersion.SYS_VERSION_FLOAT >= 12.0 && iOSVersion.SYS_VERSION_FLOAT < 13.0)
}
デバイスの向きに関係なく画面の幅/高さが必要な場合(縦向きのView Controllerのみを横向きから起動する場合に適しています):
CGFloat screenWidthInPoints = [UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale;
CGFloat screenHeightInPoints = [UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale;
[UIScreen mainScreen] .nativeBounds < - ドキュメントから - >物理スクリーンの境界矩形(ピクセル単位)。この長方形は、縦向きのデバイスに基づいています。この値はデバイスが回転しても変わりません。
これは、画面サイズを取得するための迅速な方法です。
print(screenWidth)
print(screenHeight)
var screenWidth: CGFloat {
if UIInterfaceOrientationIsPortrait(screenOrientation) {
return UIScreen.mainScreen().bounds.size.width
} else {
return UIScreen.mainScreen().bounds.size.height
}
}
var screenHeight: CGFloat {
if UIInterfaceOrientationIsPortrait(screenOrientation) {
return UIScreen.mainScreen().bounds.size.height
} else {
return UIScreen.mainScreen().bounds.size.width
}
}
var screenOrientation: UIInterfaceOrientation {
return UIApplication.sharedApplication().statusBarOrientation
}
これらは、標準機能として以下のものに含まれています。
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
スイフト3.0
幅のため
UIScreen.main.bounds.size.width
高さのため
UIScreen.main.bounds.size.height
現代の答え:
アプリがiPadで分割表示をサポートしている場合、この問題は少し複雑になります。あなたは2つのアプリを含むかもしれない画面のサイズではなく、ウィンドウのサイズが必要です。実行中にウィンドウのサイズも変わる場合があります。
アプリのメインウィンドウのサイズを使う:
UIApplication.shared.delegate?.window??.bounds.size ?? .zero
注:上記の方法は、起動時にwindowがキーウィンドウになる前に誤った値になる可能性があります。あなたが幅だけを必要とするならば、以下の方法は非常に 推奨されます :
UIApplication.shared.statusBarFrame.width
UIScreen.main.bounds
を使った古い解決法はデバイスの境界を返します。アプリが分割表示モードで実行されていると、間違ったサイズになります。
アプリが2つ以上のウィンドウを含み、ウィンドウのサイズが小さい場合、最もホットな回答のself.view.window
が間違ったサイズになることがあります。