如何以编程方式检测 iPhone 6 & 6 Plus 视图模式
How to detect iPhone 6 & 6 Plus View Mode Programmatically
有没有办法以编程方式识别视图模式(在设置 > 显示和亮度中)?
许多应用设计在标准模式和缩放模式下的行为不同。
请参考图片:
任何帮助将不胜感激。 :)
我在 2 种类型的设备 iPhone 6(标准模式)和 iPhone 6(缩放模式)中安装应用程序时遇到了同样的问题,但后来我尝试捕捉高度和iPhone 启动时的宽度。
在 ViewController.h
class 中 viewDidLoad
方法中尝试在控制台中检查高度和宽度。
NSLog(@"width %f, height %f",self.view.frame.size.width,self.view.frame.size.height);
通过选中此项,您可以了解标准模式和缩放模式之间的区别。
来自 Vizllx 的回答,你也可以像下面这样检查我试过的内容。
UIScreen *MainScreen = [UIScreen mainScreen];
UIScreenMode *ScreenMode = [MainScreen currentMode];
CGSize Size = [ScreenMode size];
NSLog(@"width %f, height %f",Size.width,Size.height);
谢谢。
您可以使用 [UIScreen mainScreen].nativeScale
如果正常则给您 2.6f
,如果放大 iPhone 6 加则给您 2.8f
,或者定义宏:
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
#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) && ((IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale) || !IS_OS_8_OR_LATER))
#define IS_STANDARD_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale)
#define IS_ZOOMED_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale > [UIScreen mainScreen].scale)
#define IS_STANDARD_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_ZOOMED_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale < [UIScreen mainScreen].scale)
有没有办法以编程方式识别视图模式(在设置 > 显示和亮度中)?
许多应用设计在标准模式和缩放模式下的行为不同。
请参考图片:
任何帮助将不胜感激。 :)
我在 2 种类型的设备 iPhone 6(标准模式)和 iPhone 6(缩放模式)中安装应用程序时遇到了同样的问题,但后来我尝试捕捉高度和iPhone 启动时的宽度。
在 ViewController.h
class 中 viewDidLoad
方法中尝试在控制台中检查高度和宽度。
NSLog(@"width %f, height %f",self.view.frame.size.width,self.view.frame.size.height);
通过选中此项,您可以了解标准模式和缩放模式之间的区别。
来自 Vizllx 的回答,你也可以像下面这样检查我试过的内容。
UIScreen *MainScreen = [UIScreen mainScreen];
UIScreenMode *ScreenMode = [MainScreen currentMode];
CGSize Size = [ScreenMode size];
NSLog(@"width %f, height %f",Size.width,Size.height);
谢谢。
您可以使用 [UIScreen mainScreen].nativeScale
如果正常则给您 2.6f
,如果放大 iPhone 6 加则给您 2.8f
,或者定义宏:
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
#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) && ((IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale) || !IS_OS_8_OR_LATER))
#define IS_STANDARD_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale)
#define IS_ZOOMED_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale > [UIScreen mainScreen].scale)
#define IS_STANDARD_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_ZOOMED_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale < [UIScreen mainScreen].scale)