Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中区分视网膜和非视网膜显示_Ios_Iphone_Objective C_Retina Display - Fatal编程技术网

在iOS中区分视网膜和非视网膜显示

在iOS中区分视网膜和非视网膜显示,ios,iphone,objective-c,retina-display,Ios,Iphone,Objective C,Retina Display,我试图在viewDidLoad方法中检查视网膜/非视网膜显示,如下所示 调整两个显示器的布局效果良好 BOOL isRetina = FALSE; if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { if ([[UIScreen mainScreen] scale] == 2.0) { isRetina = TRUE; } else { isRetina = FAL

我试图在viewDidLoad方法中检查视网膜/非视网膜显示,如下所示

调整两个显示器的布局效果良好

BOOL isRetina = FALSE;

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        isRetina = TRUE;
    } else {
        isRetina = FALSE;
    }
}

if (isRetina) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}
它在xcode 5中工作正常,但在xcode 4中构建时出错

错误如下

Property 'edgesForExtendedLayout' not found on object of type 'FirstViewController *'

如何解决它。

edgesForExtendedLayout
属性仅在iOS7+中。您还应该有条件地检查操作系统版本。如果低于iOS7,则会抛出错误。视网膜设备并不意味着它在iO7上运行。按照rmaddy的建议,检查方法的可用性更准确

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
    //Do stuff
}

edgesForExtendedLayout
是在iOS7上添加的,因此它只在与Xcode 5捆绑的基本sdk7.0中可用

您的Xcode 4将使用低于iOS 7的基本sdk版本

参见

仅在iOS 7.0或更高版本中才提供您的错误it自我应答
edgesForExtendedLayout
。您可以在运行时使用

您可以简单地将以下代码:-

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
    [self setEdgesForExtendedLayout:UIRectEdgeNone];
}
您需要检查iOS版本,而不是检查视网膜或非视网膜,如:-

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {

        // Load resources for iOS 6.1 or earlier

    } else {

       self.edgesForExtendedLayout=UIRectEdgeNone;
       self.extendedLayoutIncludesOpaqueBars=NO;
       self.automaticallyAdjustsScrollViewInsets=NO;

    }

#define NSFoundationVersionNumber_iOS_4_0  751.32
#define NSFoundationVersionNumber_iOS_4_1  751.37
#define NSFoundationVersionNumber_iOS_4_2  751.49
#define NSFoundationVersionNumber_iOS_4_3  751.49
#define NSFoundationVersionNumber_iOS_5_0  881.00
#define NSFoundationVersionNumber_iOS_5_1  890.10
#define NSFoundationVersionNumber_iOS_6_0  993.00
#define NSFoundationVersionNumber_iOS_6_1  993.00

if(floor(NSFoundationVersionNumber)如前所述,
edgesForExtendedLayout
仅在iOS 7上可用。Nitin的答案应该可以帮助您避免编译错误

如果希望支持较低版本的iOS,则应使用iOS 7 SDK在Xcode 5中编译,但有条件地定义呈现视图的方式


请参阅苹果的文档:

如果要使用edgesForExtendedLayout属性,请使用此代码,因为这是用于管理布局的ios7属性

NSString *reqSysVer @"7.0"
NSString *currSysVer [[UIDevice currentDevice] systemVersion]
BOOL isRetina = FALSE;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        isRetina = TRUE;
    } else {
        isRetina = FALSE;
    }
}
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending){
    if (isRetina) {
            self.edgesForExtendedLayout=UIRectEdgeNone;
            self.extendedLayoutIncludesOpaqueBars=NO;
            self.automaticallyAdjustsScrollViewInsets=NO;
    }
}

不,不要检查iOS的版本。正确的方法是检查Th方法是否存在。查看scale属性是否存在几乎没有意义。它已经存在了一段时间。我不太可能需要在不存在的地方支持iOS的版本。请检查文档以确定。为什么要将retina与edgesForExtendedLayout设置捆绑在一起?它们彼此无关。最后,为什么要同时使用Xcode 4和5来构建相同的代码?这是一种糟糕的处理方法。请查看Anil的答案以了解正确的方法。如果可能,您应该始终检查属性、方法或类是否存在。仅在没有其他可能的情况下检查操作系统版本方式。为什么要检查
显示链接与目标:选择器:
方法?这与它是否是视网膜设备无关。此外,这与原始问题中的问题有什么关系?
NSString *reqSysVer @"7.0"
NSString *currSysVer [[UIDevice currentDevice] systemVersion]
BOOL isRetina = FALSE;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        isRetina = TRUE;
    } else {
        isRetina = FALSE;
    }
}
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending){
    if (isRetina) {
            self.edgesForExtendedLayout=UIRectEdgeNone;
            self.extendedLayoutIncludesOpaqueBars=NO;
            self.automaticallyAdjustsScrollViewInsets=NO;
    }
}