我有一个iOS静态库,我正在使用iOS 6.1进行编译。我想做的是在编译时运行检查以查看链接到我的静态库的iOS应用程序是否使用iOS7编译(并在该事件中运行一些代码)。有没有办法做到这一点?我试过了:
非常感谢任何帮助。谢谢!
编辑:根据请求,这里有关于我正在努力完成的更多信息。
我的iOS6编译静态库提供全屏广告。随着iOS7对状态栏显示方式的更改,我的广告(UIViews w / UIWebViews)出现在状态栏元素下方。所以,我正在尝试检测使用我的静态库的应用程序是否使用iOS7编译,所以我可以做一些事情,比如调整前面提到的UIWebView的来源,在我的顶部添加一个20点的灰色UIView对象主要的UIView对象,所以状态栏元素是可见的等等。此外,检查应用程序是否针对iOS6编译是非常重要,所以我不会错误地应用UI修复。检查UIDevice的systemVersion属性将无法正常工作,因为它将返回相同的内容,无论使用我的库的应用程序是在iOS6还是iOS7上编译。
答案 0 :(得分:2)
您可以在应用程序的Mach-O标题中搜索LC_VERSION_MIN_IPHONEOS,它会告诉您应用程序链接的SDK版本。
答案 1 :(得分:0)
您应该在要调用的选择器上使用运行时内省。
E.g。
if ([self.navigationController.navigationBar respondsToSelector:@selector(barTintColor)]) {
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
}
或者,如果必须,您可以使用系统版本检查
if ([[UIDevice currentDevice] systemVersion].floatValue < 7.000000) {
[[UIBarButtonItem appearanceWhenContainedIn:containerClass, nil] setTintColor:tintColor];
}
内省更好,因为它保证了方法可用,并且在比较次要系统版本时,上述系统检查方法不可靠。
答案 2 :(得分:0)
我看到了你的困境。您需要知道兼容模式是否处于活动状态。我建议升级您的库,无论如何都要使用iOS 7构建,就像目标应用程序是为iOS 7构建的一样,即使您是为iOS 6构建的,因为运行时动态链接且其特性由主机应用程序,而不是你的SDK。
无论如何,这是我如何确保您的webview正确显示:
获取窗口的边界。窗口始终以纵向方向表示屏幕的大小。观点转变为那个空间。这里的关键是iOS 6上的窗口调整其视图控制器以考虑状态栏(除了具有隐藏状态栏的应用程序),但在iOS 7上,它的大小可以在状态栏下方。然后,您可以找到状态栏方向,从窗口的高度(或宽度)中取出必要的20px,并使用UIKit将矩形转换为本地视图中的坐标
CGRect windowBounds = [[[UIApplication sharedApplication] keyWindow] bounds];
CGRect advertRect;
if ([[UIApplication sharedApplication] isStatusBarHidden]) {
advertRect = [[[UIApplication sharedApplication] keyWindow] convertRect:advertRect
toView:self.view];
}
else{
//status bar is not hidden
CGRectEdge edge;
switch ([[UIApplication sharedApplication] statusBarOrientation]) {
case UIInterfaceOrientationLandscapeLeft:
edge = CGRectMinXEdge;
break;
case UIInterfaceOrientationLandscapeRight:
edge = CGRectMaxXEdge;
break;
case UIInterfaceOrientationPortraitUpsideDown:
edge = CGRectMaxYEdge;
break;
case UIInterfaceOrientationPortrait:
default:
edge = CGRectMinYEdge;
break;
}
CGRect statusBarRect;
CGRect remainingRect;
CGRectDivide(windowBounds, &statusBarRect, &remainingRect, 20.0, edge);
//converts from window co-ordinates to view co-ordinates
advertRect = [[[UIApplication sharedApplication] keyWindow] convertRect:advertRect
toView:myView];
}
无论您在哪个iOS上运行,此rect都将是状态栏区域下所有剩余窗口空间的矩形。您应该能够使用它来定位您的Web视图。