根据 iOS 版本调用适当的 setStatusBarHidden
Posted
技术标签:
【中文标题】根据 iOS 版本调用适当的 setStatusBarHidden【英文标题】:Calling the appropriate setStatusBarHidden per iOS version 【发布时间】:2011-03-02 23:28:28 【问题描述】:今天我的应用获得批准,但我收到用户的电子邮件说它崩溃了。我想通了
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide];
问题出在哪里,因为用户的固件是 3.1.x,所以这个 API 不工作并且应用崩溃了。
所以我把它替换为
if ([[[UIDevice currentDevice] systemVersion] floatValue]>=3.2)
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide];
else
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
我的问题...
是我做的最好的解决方案吗?
当我将 Traget OS 固件设置为 3.0 时,为什么 XCODE 没有警告我 SetStatusBarHidden withAnimation 不在 3.0 中?
我是否必须检查每个 API 以查看它是否适用于我的目标操作系统?
谢谢
【问题讨论】:
【参考方案1】:我建议您使用以下代码片段,而不是检查操作系统的版本,而是检查选择器当前是否可用。
if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
else
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
【讨论】:
【参考方案2】:仅供参考
[[UIApplication sharedApplication] setStatusBarHidden:YES];
而不是
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
它可以在没有警告的情况下工作
【讨论】:
【参考方案3】:很遗憾,如果你使用模拟器使用4.0 SDK进行编译,上述解决方案会给你一个警告,默认情况下被视为错误:
warning: 'setStatusBarHidden:animated:' is deprecated (declared at /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIApplication.h:267)
因此,您可以在构建设置中将“将警告视为错误”设置为 false,也可以使用宏有条件地包含正确的代码。我的基础 SDK 设置为 Device 4.0,我的目标操作系统是 3.1,并且正在使用这个宏:
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
#if __IPHONE_OS_VERSION_MIN_REQUIRED > 30100
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];
#else
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
#endif
#endif
请注意,setStatusBarHidden:withAnimation 在 3.2 中可用。
【讨论】:
【参考方案4】:这可能是最好的做法,而不是将您的应用程序限制为 >=3.2。无论如何,你的 xcode 应该给你一个警告,不支持 SetStatusBarHidden withAnimation 消息(“可能不响应”)。
【讨论】:
我没有收到警告,因为我将 IPHONEOS_DEPLOYMENT_TARGET 设置为 3.0 而不是 BASE SDK。在最后一个 xcode 版本 3.2.3 上,我只看到固件 4.0 和 3.2 作为基础 SDK,所有其他版本都丢失了。以上是关于根据 iOS 版本调用适当的 setStatusBarHidden的主要内容,如果未能解决你的问题,请参考以下文章