有没有办法在Swift中获取设备型号名称(iPhone 4S,iPhone 5,iPhone 5S等)?
我知道有一个名为的属性,UIDevice.currentDevice().model但它只返回设备类型(iPod touch,iPhone,iPad,iPhone模拟器等).
我也知道可以使用这种方法在Objective-C中轻松完成:
#import <sys/utsname.h>
struct utsname systemInfo;
uname(&systemInfo);
NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
但是我正在Swift中开发我的iPhone应用程序,所以有人可以用同样的方式帮助我在Swift中解决这个问题吗?
我想知道是否可以确定当前设备是什么类型的iPhone(例如)?我知道有可能通过这个模型
NSString *deviceType = [[UIDevice currentDevice] model];
只返回我是否有"iPhone"或"iPod",但我想知道是否有可能检测/知道我是否有iPhone 3GS与iPhone 4对比一个iPhone 4S (实际上,我真正想做的就是确定我是否有3G,因为我做的是相当图形密集的东西).
所以是的,请告诉我,谢谢!
如何通过宏检测设备模型?我曾经使用过这样的东西但模拟器上的结果总是IS_IPHONE_5
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)
Run Code Online (Sandbox Code Playgroud) 我正在更新我的应用程序,以适应iPhone X.所有视图现在工作正常,除了一个.我有一个视图控制器,提供覆盖整个屏幕的自定义UIView.在我使用UIScreen.main.bounds之前,在完成所有布局之前找出视图的大小(我需要它来为collectionView放置正确的itemSize).我想现在我可以做一些类似于
UIScreen.main.bounds.size.height - safeAreaInsets.bottom获得正确可用尺寸的东西.问题是,safeAreaInsets在iPhone X(模拟器)上尝试返回(0,0,0,0).有任何想法吗?在其他视图中,我得到了safeAreaInsets的正确数字.
谢谢!
我需要将此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
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何检测iPhone 5(宽屏设备)?
有没有办法可以检测当前设备是否是iphone 5?更具体地说,如果它使用新的4"屏幕?
我正在尝试写一个宏来确定该设备是3.5英寸还是4英寸.下面有类似的东西.
#define IOS_OLDER_THAN_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] < 6.0 )
#define IOS_NEWER_OR_EQUAL_TO_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 6.0 )
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗.请
我需要对我的应用程序进行一些更改,但仅适用于iPhone X.
该应用程序是基于Apache Cordova(使用Ionic框架).
是否有用于检测iPhone X 的cordova插件?如果答案是否定的,那么知道用户是否在javascript中拥有iPhone X的最佳方法是什么?
谢谢
在我的应用程序中,有一些无框设备的逻辑(iPhoneX,Xs Xs max,Xr).目前它基于设备的模型工作,因此,我通过DeviceKit框架检测模型.
但我想将此逻辑扩展到未来的无框设备.可能在一年内我们将有一些额外的无框设备.那么,我如何检测设备是否无框架?它应该涵盖所有当前的无框设备和未来的设备.
我们不能依赖faceID,safeAreaInset,屏幕高度或大小.那么,那又怎样?
如何检测iPhone X上的运行?我尝试了以下代码.
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_X (IS_IPHONE && SCREEN_MAX_LENGTH == 812.0)
Run Code Online (Sandbox Code Playgroud)
当我在iOS模拟器中运行此宏时,IS_IPHONE_X则为真.这个宏是否正确?
我相信有更好,更合适的方法来做到这一点.但是现在我正在使用UIScreen.main.bounds来检测我是否正在处理iPhone X(812高).这个特定的应用程序只是景观,顺便说一句.所以这就是我在这个函数中所拥有的,我正在为幻灯片视图创建幻灯片:
func setupSlideViews(slideView: [SlideView]) {
let screenSize = UIScreen.main.bounds
var frame: CGRect!
if screenSize.width == 812 {
frame = scrollView.frame
} else {
frame = view.frame
}
scrollView.frame = frame
scrollView.contentSize = CGSize(width: frame.width * CGFloat(slideViews.count), height: frame.height)
for (i, slideView) in slideViews.enumerated() {
slideView.frame = CGRect(x: frame.width * CGFloat(i), y: 0, width: frame.width, height: frame.height)
scrollView.addSubview(slideView)
}
}
Run Code Online (Sandbox Code Playgroud)
但是你如何检查模型?
我的一个应用程序连接到Web应用程序服务,该服务向用户提供特定于设备的新闻.为了适应最新的iPhone版本,我需要以编程方式区分iPhone XS和iPhone X.如何做到这一点?
[[UIScreen mainScreen] bounds].size总是一个很好的起点,告诉不同的设备分开.但是,iPhone XS和iPhone X具有相同的屏幕尺寸:1125 x 2436.因此[[UIScreen mainScreen] bounds].size在这种情况下使用不起作用.
还有其他方法可以检测最新的iPhone版本吗?
编辑: 这不是 "如何检测iPhone X"的问题的重复,因为那里讨论的所有答案/解决方案都使用屏幕尺寸来指定设备类型.如上所述,iPhone X和iPhone XS具有完全相同的尺寸,因此解决方案无法区分这两者......
我正在尝试为 iPhone X 调整我的应用程序的大小,但遇到了问题。目前我像这样定义屏幕尺寸:
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
Run Code Online (Sandbox Code Playgroud)
并根据电话类型进行约束。(是的,我知道不是最佳的,但它是我所做的)
当您使用 iPhone X 模拟器时,出于某种原因,它会像 iPhone 6 一样读取屏幕高度和宽度。
然后我搜索了 stack overflox 并发现了这个: 如何在 …