我试图在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 *'
如何解决它。
答案 0 :(得分:1)
edgesForExtendedLayout
属性仅适用于iOS7 +。您还应该有条件地检查操作系统版本。如果它低于iOS7则会引发错误。视网膜设备并不意味着它在iO7上运行。根据rmaddy
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
//Do stuff
}
答案 1 :(得分:1)
edgesForExtendedLayout
,因此它仅在与Xcode 5捆绑在一起的Base SDK 7.0中可用。
您的Xcode 4将使用低于iOS 7的基本sdk版本。
的课程参考答案 2 :(得分:1)
您的自我回答错误edgesForExtendedLayout
仅适用于iOS 7.0或更高版本。您可以使用
你可以简单地输入这段代码: -
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
答案 3 :(得分:0)
如前所述,edgesForExtendedLayout
仅适用于iOS 7.Nitin的答案应该可以帮助您避免编译错误。
如果你想支持更低版本的iOS,你应该使用iOS 7 SDK在Xcode 5中编译,但有条件地定义你想要渲染视图的方式。
答案 4 :(得分:-1)
try this
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
([UIScreen mainScreen].scale == 2.0))
{
// Retina display
NSLog(@"---------------Retina display");
} else {
// non-Retina display
NSLog(@"---------------non-Retina display");
}
答案 5 :(得分:-2)
如果您想使用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;
}
}