根据 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的主要内容,如果未能解决你的问题,请参考以下文章

如何为本地通知界面编写适当的测试?

《Go语言精进之路》读书笔记 | 选择适当的Go语言版本

基于 iOS 版本的不显眼的运行前定义值

APP测试流程和测试点

根据解析的字符串创建对象

iOS:动画子视图而不调用 layoutSubviews