![](/img/trans.png)
[英]Detect whether iphone is of notch screen or normal rectangle screen to avaid navigation bar size issue?
[英]Is it okay to use this code to detect the iPhone screen size?
我知道根据屏幕尺寸更改应用程序不是一个好主意,但我正在尝试修改相机并使用自定义叠加层图像,因此我需要知道屏幕尺寸。 有很多使用宏等检测屏幕尺寸的解决方案,例如我正在使用的:
-(void)detectPhone{
CGFloat width;
width= [[UIScreen mainScreen] bounds].size.width;
if(width==320) {
CGFloat height;
height = [[UIScreen mainScreen] bounds].size.height;
if(height==480) {
NSLog(@"iPhone 4/4s");
}
else {
NSLog(@"iPhone 5");
}
}
else if (width==375) {
NSLog(@"iPhone 6");
}
else {
NSLog(@"iPhone 6+");
}
}
使用此方法有什么问题,或者在任何情况下都不起作用? 通过模拟器运行它似乎很好。 任何指针将不胜感激。 谢谢
这样很好,但是您正在比较浮点数,所以我会避免使用==
,而是使用>
我用这个:
#define IS_IPHONE [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone #define PJ_SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) #define PJ_SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) #define PJ_SCREEN_MAX_LENGTH (MAX(PJ_SCREEN_WIDTH, PJ_SCREEN_HEIGHT)) #define PJ_SCREEN_MIN_LENGTH (MIN(PJ_SCREEN_WIDTH, PJ_SCREEN_HEIGHT)) #define IS_HEIGHT_GTE_568 PJ_SCREEN_MAX_LENGTH >= 568.0f #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0)) #define IOS7_DELTA_HEIGHT (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) ? 20:0) #define IS_IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) #define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size
如果要检查设备型号,请看一下: 使用iPhone SDK确定设备(iPhone,iPod Touch)
我认为您在使用iOS8时会遇到问题。 从iOS8 [UIScreen mainScreen] .bounds
是面向接口的(请参阅WWDC 2014的会话“ iOS 8中的View Controller Advances”),这意味着在横向模式下,iOS8的高度和宽度是相反的。
您可以使用以下代码创建一个助手:
CGRect bounds = [UIScreen mainScreen].bounds;
if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
bounds.size = CGSizeMake(bounds.size.height, bounds.size.width);
//Your code to detect the device
...
}
您应该只将屏幕显示一次,然后才能在整个应用程序中使用它(任何需要时)。 为此,您可以在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中的AppDelegate.h
和AppDelegate.m
中具有可变的CGSize
deviceSize,您可以获取该设备像这样的大小
deviceSize = [[UIScreen mainScreen] bounds].size;
您可以定义一个这样的函数,
- (CGSize) sizeOfDevice {
return deviceSize;
}
像这样将其添加到AppDelegate.h
,
- (CGSize) sizeOfDevice;
然后可以将其与委托对象一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.