如何获取设备的宽度和高度?


73

在Objective-C中,我们可以使用以下代码获取设备的宽度和高度:

CGRect sizeRect = [UIScreen mainScreen].applicationFrame
float width = sizeRect.size.width
float height = sizeRect.size.height

Swift如何做到这一点?


2
仅供参考-applicationFrame不提供屏幕尺寸。它给出了应用程序的大小。这是更好地使用bounds,而不是applicationFrame如果你想要的屏幕尺寸。
rmaddy14 2014年

是的,rmaddy你是对的。我已经在我的应用程序中进行了此更改。感谢您的答复。
Rigel Networks

Answers:


148

我没有尝试过,但是应该。

var bounds = UIScreen.main.bounds
var width = bounds.size.width
var height = bounds.size.height

它给OutOfScope值。当我使用您的代码时,它给我打字错误。
Rigel Networks

哦,是的,它的CGFloat不会浮动..现在检查
iPatel 2014年

1
为什么不使用Swift自动类型推断?就像:var bounds = UIScreen.mainScreen()。bounds
Aks 2014年

2
@Aks显式定义类型更安全,更易读。
AstroCB 2015年

您如何将CGFloat值显示为Int?
MoralCode

20

斯威夫特4.2

let screenBounds = UIScreen.main.bounds
let width = screenBounds.width
let height = screenBounds.height

我为什么得到:使用未解析的标识符'UIScreen'...?
罗比

18

@Houssni的答案是正确的,但是由于我们在谈论Swift,并且这种用例经常出现,因此可以考虑扩展CGRect类似于以下内容:

extension CGRect {
    var wh: (w: CGFloat, h: CGFloat) {
        return (size.width, size.height)
    }
}

然后,您可以像这样使用它:

let (width, height) = UIScreen.mainScreen().applicationFrame.wh

万岁!:)


15

如果要在代码中使用它。干得好。

func iPhoneScreenSizes() {
    let bounds = UIScreen.main.bounds
    let height = bounds.size.height

    switch height {
    case 480.0:
        print("iPhone 3,4")
    case 568.0:
        print("iPhone 5")
    case 667.0:
        print("iPhone 6")
    case 736.0:
        print("iPhone 6+")
    case 812.0:
        print("iPhone X")
        print("iPhone XS")
        break
    case 896.0:
        print("iPhone XR")
        print("iPhone XS Max")
        break
    default:
        print("not an iPhone")

    }
}

1
@Jeff“不是iPhone” XD
mhdjazmati19年

9
var sizeRect = UIScreen.mainScreen().applicationFrame
var width    = sizeRect.size.width
var height   = sizeRect.size.height

正是这样,也对其进行了测试。


4
也没有;LOL XD
Matteo Gobbi 2014年

1
是的,像我一样,我现在真的很害怕!如果我开始写所有内容时都Swift没有分号,然后再次出现,ObjectiveC则可能会出现Ω(n)编译错误LOL
Matteo Gobbi 2014年

2
@MatteoGobbi我认为使用分号是一种很好的做法...使用它们。
席兰2014年

7

(快速3)请记住,大多数宽度和高度值将基于设备的当前方向。如果您想要一个不基于旋转的一致值,并且可以像纵向旋转那样提供结果,请尝试fixedCoordinateSpace

let screenSize = UIScreen.main.fixedCoordinateSpace.bounds

5

由于您要查找设备的屏幕尺寸,最简单的方法是:

let screenSize = UIScreen.mainScreen().bounds.size
let width = screenSize.width
let height = screenSize.height

3

@Adam Smaka的答案很接近,而在Swift 3中,它是以下内容:

let screenBounds = UIScreen.main.bounds
let width = screenBounds.width
let height = screenBounds.height

3

UIScreen对象定义与基于硬件的显示关联的属性。iOS设备有一个主屏幕和零个或多个附加屏幕。每个屏幕对象都为关联的显示和其他有趣的属性定义了边界矩形

Apple Doc URL:

https://developer.apple.com/reference/uikit/uiwindow/1621597-screen

快速获取您用户设备的高度/宽度

let screenHeight = UIScreen.main.bounds.height
let screenWidth = UIScreen.main.bounds.width

1
 static func getDeviceType() -> String
    {
        var strDeviceType = ""
        if UIDevice().userInterfaceIdiom == .phone {
            switch UIScreen.main.nativeBounds.height {
            case 1136:
                strDeviceType = "iPhone 5 or 5S or 5C"
            case 1334:
                strDeviceType = "iPhone 6/6S/7/8"
            case 1920, 2208:
                strDeviceType = "iPhone 6+/6S+/7+/8+"
            case 2436:
                strDeviceType = "iPhone X"
            case 2688:
                strDeviceType = "iPhone Xs Max"
            case 1792:
                strDeviceType = "iPhone Xr"
            default:
                strDeviceType = "unknown"
            }
        }
        return strDeviceType
    }

0

在Swift 4中,我不得不使用NSScreen.main?.deviceDescription

let deviceDescription = NSScreen.main?.deviceDescription          
let screenSize = deviceDescription![.size]
let screenHeight = (screenSize as! NSSize).height

0

这非常适合Xcode 12

func iPhoneScreenSizes() {
        let height = UIScreen.main.bounds.size.height
        switch height {
        case 480.0:
            print("iPhone 3,4")
        case 568.0:
            print("iPhone 5 | iPod touch(7th gen)")
        case 667.0:
            print("iPhone 6 | iPhone SE(2nd gen) | iPhone 8")
        case 736.0:
            print("iPhone 6+ | iPhone 8+")
        case 812.0:
            print("iPhone X | iPhone XS | iPhone 11 Pro")
        case 896.0:
            print("iPhone XR | iPhone XS Max | iPhone 11 | iPhone 11 Pro Max")
        default:
            print("not an iPhone")
        }
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.