objective-c 如何以编程方式快速检查 iphone 4 和 iphone 5 的屏幕尺寸
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27775779/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to check screen size of iphone 4 and iphone 5 programmatically in swift
提问by SantoshMaurya
I need to replace this Objective-C to Swift. Does anyone have any suggestions on how to transfer it?
我需要将此 Objective-C 替换为 Swift。有人对如何转移它有任何建议吗?
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
// iPhone Classic
}
if(result.height == 568)
{
// iPhone 5
}
}
回答by Leo Dabus
Xcode 11 ? Swift 5.1
Xcode 11?斯威夫特 5.1
extension UIDevice {
var iPhoneX: Bool { UIScreen.main.nativeBounds.height == 2436 }
var iPhone: Bool { UIDevice.current.userInterfaceIdiom == .phone }
var iPad: Bool { UIDevice().userInterfaceIdiom == .pad }
enum ScreenType: String {
case iPhones_4_4S = "iPhone 4 or iPhone 4S"
case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
case iPhones_X_XS = "iPhone X or iPhone XS"
case iPhone_XR_11 = "iPhone XR or iPhone 11"
case iPhone_XSMax_ProMax = "iPhone XS Max or iPhone Pro Max"
case iPhone_11Pro = "iPhone 11 Pro"
case unknown
}
var screenType: ScreenType {
switch UIScreen.main.nativeBounds.height {
case 1136:
return .iPhones_5_5s_5c_SE
case 1334:
return .iPhones_6_6s_7_8
case 1792:
return .iPhone_XR_11
case 1920, 2208:
return .iPhones_6Plus_6sPlus_7Plus_8Plus
case 2426:
return .iPhone_11Pro
case 2436:
return .iPhones_X_XS
case 2688:
return .iPhone_XSMax_ProMax
default:
return .unknown
}
}
}
print("screenType:", UIDevice.current.screenType)
回答by Vlad Papko
Alternative solution with UIScreen extension ( iOS 8 and later):
带有 UIScreen 扩展的替代解决方案(iOS 8 及更高版本):
extension UIScreen {
enum SizeType: CGFloat {
case Unknown = 0.0
case iPhone4 = 960.0
case iPhone5 = 1136.0
case iPhone6 = 1334.0
case iPhone6Plus = 1920.0
}
var sizeType: SizeType {
let height = nativeBounds.height
guard let sizeType = SizeType(rawValue: height) else { return .Unknown }
return sizeType
}
}
Usage:
用法:
if UIScreen.mainScreen().sizeType == .iPhone4 {
// Make specific layout for small devices.
}
回答by Sudhi 9135
if UIDevice().userInterfaceIdiom == .Phone {
switch UIScreen.mainScreen().bounds.size.height{
case 480:
print("iPhone 4S")
case 568:
print("iPhone 5")
default:
print("other models")
}
}
UIScreen.mainScreen().bounds.size.height will provide the height of the device. By using this value we can check the particular iphone device.
UIScreen.mainScreen().bounds.size.height 将提供设备的高度。通过使用这个值,我们可以检查特定的 iphone 设备。
回答by Sujal
New Update with iPhone XS, iPhone XS Max & iPhone XR
iPhone XS、iPhone XS Max 和 iPhone XR 的新更新
extension UIDevice {
var iPhoneX: Bool {
return UIScreen.main.nativeBounds.height == 2436
}
var iPhone: Bool {
return UIDevice.current.userInterfaceIdiom == .phone
}
enum ScreenType: String {
case iPhone4_4S = "iPhone 4 or iPhone 4S"
case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
case iPhoneXR = "iPhone XR"
case iPhoneX_iPhoneXS = "iPhone X,iPhoneXS"
case iPhoneXSMax = "iPhoneXS Max"
case unknown
}
var screenType: ScreenType {
switch UIScreen.main.nativeBounds.height {
case 960:
return .iPhone4_4S
case 1136:
return .iPhones_5_5s_5c_SE
case 1334:
return .iPhones_6_6s_7_8
case 1792:
return .iPhoneXR
case 1920, 2208:
return .iPhones_6Plus_6sPlus_7Plus_8Plus
case 2436:
return .iPhoneX_iPhoneXS
case 2688:
return .iPhoneXSMax
default:
return .unknown
}
}
}
print("screenType:", UIDevice.current.screenType.rawValue)
打印(“屏幕类型:”,UIDevice.current.screenType.rawValue)
回答by John Riselvato
Here's how I do it with Xcode 10 + Swift 4 + iPhone XS/XS Max/XR
这是我如何使用 Xcode 10 + Swift 4 + iPhone XS/XS Max/XR
struct ScreenSize {
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 {
static let IS_IPHONE_4_OR_LESS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
static let IS_IPHONE_5 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
static let IS_IPHONE_6 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
static let IS_IPHONE_6P = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
static let IS_IPHONE_X = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 812
static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
static let IS_IPAD_PRO = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
static let IS_IPHONE_XSMAX = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 2688
static let IS_IPHONE_XR = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 1792
}
回答by maninvan
Just to add to https://stackoverflow.com/a/27776671/1766242
只是添加到https://stackoverflow.com/a/27776671/1766242
Allows you to write
允许你写
if UIDevice.isScreen35inch() {
// Do something to fit small screen
} else {
// do something else for larger screens
}
See below
见下文
extension UIDevice {
var iPhone: Bool {
return UIDevice().userInterfaceIdiom == .Phone
}
enum ScreenType: String {
case iPhone4
case iPhone5
case iPhone6
case iPhone6Plus
case Unknown
}
var screenType: ScreenType? {
guard iPhone else { return nil }
switch UIScreen.mainScreen().nativeBounds.height {
case 960:
return .iPhone4
case 1136:
return .iPhone5
case 1334:
return .iPhone6
case 2208:
return .iPhone6Plus
default:
return nil
}
}
// helper funcs
static func isScreen35inch() -> Bool {
return UIDevice().screenType == .iPhone4
}
func isScreen4inch() -> Bool {
return UIDevice().screenType == .iPhone5
}
func isScreen47inch() -> Bool {
return UIDevice().screenType == .iPhone6
}
func isScreen55inch() -> Bool {
return UIDevice().screenType == .iPhone6Plus
}}
回答by CSE 1994
Xcode 11 and Swift 4.2
Xcode 11 和 Swift 4.2
If you want a set frame using the screen type. Its work fine to me
如果您想要使用屏幕类型的设置框架。它对我来说很好用
enum ScreenType: String {
case iPhones_4_4S = "iPhone 4 or iPhone 4S"
case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
case iPhones_X_XS = "iPhone X or iPhone XS"
case iPhone_XR = "iPhone XR"
case iPhone_XSMax = "iPhone XS Max"
case unknown
}
var screenType: ScreenType {
switch UIScreen.main.nativeBounds.height {
case 960:
return .iPhones_4_4S
case 1136:
return .iPhones_5_5s_5c_SE
case 1334:
return .iPhones_6_6s_7_8
case 1792:
return .iPhone_XR
case 1920, 2208:
return .iPhones_6Plus_6sPlus_7Plus_8Plus
case 2436:
return .iPhones_X_XS
case 2688:
return .iPhone_XSMax
default:
return .unknown
}
}
override func viewWillLayoutSubviews() {
if screenType == .iPhone_XR || screenType == .iPhones_X_XS || screenType == .iPhone_XSMax {
self.contentView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - 95)
} else {
self.contentView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - 64)
}
}
回答by tendstoZero
In addition to the proposed way, One way of doing this is to use the struct in following way.
除了建议的方式之外,一种方法是按以下方式使用结构。
struct ScreenSize
{
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
{
static let IS_IPHONE_4_OR_LESS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
static let IS_IPHONE_5 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
static let IS_IPHONE_6 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
static let IS_IPHONE_6P = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
static let IS_IPAD_PRO = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
}
Let me know if it helps.
如果有帮助,请告诉我。
回答by gandhi Mena
try to use this:
尝试使用这个:
Create a UIViewController+Extension.swiftfile: and put into below code:
创建一个UIViewController+Extension.swift文件:并放入以下代码:
enum DeviceTypeModel{
case iphoneX
case iphone8Plus
case iphone8
case iphoneSE //SE is the like iphone 5 and iphone 5s
case iphone4s
}
extension UIViewController{
func runOnTheDeviceType(_ completion: (DeviceTypeModel) -> Void) {
if UIDevice().userInterfaceIdiom == .phone{
switch UIScreen.main.nativeBounds.height{
case 2436:
completion(.iphoneX)
case 1920:
completion(.iphone8Plus)
case 1334:
completion(.iphone8)
case 1136:
completion(.iphoneSE)
default:
completion(.iphone4s)
}
}
}
}
and use it in your viewController.swiftlike this:
并在您的viewController.swift 中使用它,如下所示:
class ChatViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
runOnTheDeviceType { devices in
switch devices{
case .iphoneSE:
//do something
case .iphone4s:
//do something
default:
//do something
}
}
}
}
you can add more cases if you want to do it. Enjoy it.
如果您愿意,可以添加更多案例。好好享受。
回答by Jelle
Answer by Leo fixed it for me. Here is some sample class for all the Xamarin.IOS devs :)
Leo 的回答为我修复了它。这是所有 Xamarin.IOS 开发人员的一些示例类:)
public static class ScreenHelper
{
public enum ScreenSizeType
{
iPhone4_4s,
iPhone5_5s_5c_SE,
iPhone6_6s_7_8,
iPhone6plus_6sPlus_7Plus_8Plus,
iPhoneX,
unknown
}
public static bool IsIphone
{
get
{
return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone;
}
}
public static bool IsNarrowScreen
{
get
{
return UIScreen.MainScreen.NativeBounds.Width <= 640;
}
}
public static ScreenSizeType CurrentScreenType
{
get
{
switch ((int)UIScreen.MainScreen.NativeBounds.Height)
{
case 960:
return ScreenSizeType.iPhone4_4s;
case 1136:
return ScreenSizeType.iPhone5_5s_5c_SE;
case 1334:
return ScreenSizeType.iPhone6_6s_7_8;
case 1920:
case 2208:
return ScreenSizeType.iPhone6plus_6sPlus_7Plus_8Plus;
case 2436:
return ScreenSizeType.iPhoneX;
default:
return ScreenSizeType.unknown;
}
}
}
}

