在iOS中如何获得屏幕的尺寸?

目前,我使用:

lCurrentWidth = self.view.frame.size.width;
lCurrentHeight = self.view.frame.size.height;

在viewWillAppear:和willAnimateRotationToInterfaceOrientation:duration:

这是我第一次看到整个屏幕的大小。第二次我得到的屏幕减去导航栏。


当前回答

你可以把这些宏放在你的pch文件中,并使用"SCREEN_WIDTH"在项目的任何地方使用

#define SCREEN_WIDTH                ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height)

和“SCREEN_HEIGHT”

#define SCREEN_HEIGHT               ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation ==   UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)

使用示例:

CGSize calCulateSizze ;
calCulateSizze.width = SCREEN_WIDTH/2-8;
calCulateSizze.height = SCREEN_WIDTH/2-8;

其他回答

iOS 13+的答案(找到键窗口的代码来源):

guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else {
    return
}

let windowWidth = window.frame.width
let windowHeight = window.frame.height

斯威夫特3.0

的宽度

UIScreen.main.bounds.size.width

身高

UIScreen.main.bounds.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];

现代的答案是:

如果你的应用在iPad上支持分屏视图,这个问题就变得有点复杂了。你需要窗口的大小,而不是屏幕的大小,这可能包含2个应用程序。窗口的大小也可能在运行时发生变化。

使用应用程序主窗口的大小:

UIApplication.shared.delegate?.window??.bounds.size ?? .zero

注意:上述方法在启动时可能会在窗口成为关键窗口之前得到错误的值。如果你只需要宽度,非常推荐以下方法:

UIApplication.shared.statusBarFrame.width

使用uisscreen .main.bounds的旧解决方案将返回设备的边界。如果你的应用程序运行在分屏视图模式,它会得到错误的尺寸。

当应用程序包含2个或2个以上的窗口且窗口大小较小时,最热答案中的Self.view.window可能会显示错误的大小。

这里我已经更新了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
}