每个iOS版本调用适当的setStatusBarHidden

时间:2010-06-12 10:03:18

标签: iphone statusbar

今天我的应用程序获得批准,但我收到用户的电子邮件说它崩溃了。我想通了

[[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];

我的问题......

我做了最好的解决方案吗?

为什么XCODE没有警告我在设置Traget OS固件3.0时SetStatusBarHidden withAnimation不在3.0中?

我是否必须检查每个API以查看它是否与我的目标操作系统一起使用?

谢谢

4 个答案:

答案 0 :(得分:23)

我建议您使用以下代码片段,而不是检查操作系统的版本,而是检查选择器当前是否可用。

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];

答案 1 :(得分:3)

仅限使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

而不是

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

没有警告

答案 2 :(得分:1)

不幸的是,如果你使用模拟器编译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中提供。

答案 3 :(得分:0)

除了将您的应用程序限制为> = 3.2之外,这可能是最好的选择。无论如何,你xcode应该警告你不支持SetStatusBarHidden withAnimation消息(“可能不响应”)。