尽管 PList 设置正确,但状态栏仍出现在 iOS 7 中

Posted

技术标签:

【中文标题】尽管 PList 设置正确,但状态栏仍出现在 iOS 7 中【英文标题】:Status Bar still appearing in iOS 7 despite correct PList settings 【发布时间】:2013-09-30 22:18:09 【问题描述】:

我刚刚升级到 XCode 5 和 ios 7。我已经阅读了我能找到的所有建议,但状态栏仍然出现在我的应用顶部。

我尝试在我的 plist 中将基于视图控制器的状态栏外观设置为 NO:

我已经尝试添加:

- (void)viewDidLoad

    // …
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
        // iOS 7
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
     else 
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    
    // …


- (BOOL)prefersStatusBarHidden

    return YES;

到我的根视图控制器。

我不知道还能尝试什么。我错过了什么明显的东西吗?

更新

我发现状态栏只出现在几个目标上,而运行相同代码的其他目标没有状态栏。我检查了他们所有的 plist... 与显示状态栏的唯一区别是它们在屏幕顶部显示一个广告栏... 我想知道这是否与它有关?

【问题讨论】:

我认为在 XIB .status 栏中设置默认位置或无。试试吧 它已经设置为无。将其设置为默认值没有效果... 检查它不能在 ios7/xcode 5 openfl.org/developer/forums/general-discussion/… 中隐藏状态栏但检查这个链接也试试***.com/questions/17763719/status-bar-wont-disappear 我已经尝试过该帖子中的解决方案,如问题中所述 你的plist设置是正确的,只要把这行[[UIApplication sharedApplication] setStatusBarHidden:YES];放在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法里AppDelegate.m就行了。 【参考方案1】:

在所有视图控制器中使用- (BOOL)prefersStatusBarHidden return YES; 。祝你好运!

【讨论】:

在所有视图控制器中?!这肯定不是解决方案吗?我有很多,而且它似乎对根目录没有任何影响,那么为什么在整个过程中都有返回调用会有所帮助? 我不知道在你的情况下,在我的情况下,它正在解决问题。或者,您可以继承 UIViewController,并实现 prefersStatusBarHidden,并使该类成为您所有视图控制器的超级类。 顺便问一下,你的应用真正的根视图控制器是什么?是导航控制器还是标签栏控制器? 它是一个导航控制器...我不应该继承 UIVC。不过还是谢谢。 那么,如果是导航控制器,你还认为你把prefersStatusBarHidden放在了正确的位置吗?试试我建议的方法,应该可以解决问题。或者,还有另一种方法,将UINavigationController 子类化并在该类中实现prefersStatusBarHidden,然后使用它。祝你好运!【参考方案2】:

在应用程序 .plist 中添加此键: UIViewControllerBasedStatusBarAppearance 并将其设置为“否”

【讨论】:

【参考方案3】:

我最终删除了 plist 文件并从另一个有效的目标复制了一个,然后更改了必要的值。列表是相同的,但这似乎解决了它。我已经尝试过干净的构建,重置模拟器等,所以我猜这是 plist/xcode 中的错误。

【讨论】:

【参考方案4】:

尝试在根视图控制器中添加下一个代码:

- (BOOL)prefersStatusBarHidden  return YES; 

【讨论】:

【参考方案5】:

不那么老套的解决方案是插入

[application setStatusBarHidden:YES]

在 AppDelegate.m 方法中

- (BOOL) application(UIApplication *)application didFinishLaunchingWithOptions:(NSDirectory *)launchOptions

喜欢 Dipen Panchasara 他的:[UIApplication sharedApplication] 提供方法调用中给出的应用程序。

因为改变一个方法总是返回YES感觉不对

【讨论】:

不幸的是,这种方法在 iOS 9.0 之后被弃用了。弃用通知建议改用 UIViewController prefersStatusBarHidden

以上是关于尽管 PList 设置正确,但状态栏仍出现在 iOS 7 中的主要内容,如果未能解决你的问题,请参考以下文章

尽管我正确设置了y,但Toast UILabel出现在屏幕外

尽管版本号正确且高于以前的版本号,但 iOS App Archive 提交失败并出现错误 [重复]

尽管将 info.plist 更改为 NSAppTransport Security 为 NO Xcode 7.2 iOS 9.2,但应用程序传输安全错误

尽管在 React 中更新了状态,但方法没有获得正确的 useState 值

错误的iOS8状态栏?

Status bar - iOS之状态栏