繁体   English   中英

在iOS8上,以横向模式显示我的应用程序将隐藏状态栏,但在iOS 7上,状态栏将显示在两个方向上

[英]On iOS8, displaying my app in landscape mode will hide the status bar but on iOS 7 the status bar is displayed on both orientations

我希望状态栏在iOS 8中以两个方向显示; 它在iOS 7中正确显示。

navigationController.isNavigationBarHidden返回NO。

为什么iOS 8会这样做?

试试这个

didRotateFromInterfaceOrientation添加以下代码

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

编辑
无需在所有视图控制器中编写代码
plist中将View controller-based status bar appearanceNO ,并在根视图控制器的viewDidLoad添加以下代码

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

演示项目
https://www.dropbox.com/s/uumneidk4wom5md/demoStatusBar.zip?dl=0

要在ios 8中以横向模式显示状态栏,请尝试以下方法

- (BOOL)prefersStatusBarHidden {
    return NO;
}

Swift版本

override func prefersStatusBarHidden() -> Bool {
    return false
}

Swift 3,Xcode 8,iOS 10,/ * ViewController.swift * /

override var prefersStatusBarHidden: Bool {
        return false
    }

Jageen的解决方案可能是最好的,只需要一个小的改动,即不使用viewDidLoad ,最好使用application:didFinishLaunchingWithOptions: .

这基本上是一个两步过程:

1)。 在项目的Info.plist文件中将“查看基于控制器的状态栏外观”设置为NO。

2)。 application:didFinishLaunchingWithOptions: ,使用以下代码强制状态栏隐藏状态为NO:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

瞧,瞧!

注意:使用上面的setStatusBarHidden:withAnimation语句来强制状态栏隐藏状态非常重要。

我遇到过同样的问题! 通过将此成瘾添加到viewDidLoad来修复

  [self setNeedsStatusBarAppearanceUpdate];

而这要实现自己

-(BOOL)prefersStatusBarHidden{
    return NO;
}

这不是问题,而是iOS 8的一个功能。状态栏将在iOS 8中以横向模式隐藏,甚至Apple的应用程序也具有相同的行为。

他们通过给我们更多的工作来保持我们的收入。

要么...

他们做了其他改变,导致比以往占用更多的空间。 随着iOS 7和“顶部布局栏指南”之类的出现,状态栏在轻扫屏幕中的轻松可用性,回收状态栏空间可用以及许多人预测状态栏可能的其他一些小提示逐步淘汰作为UI的标准部分。

由于他们在iOS 8中做出的改变试图让一组不同大小的代码变得更容易,因此对于新设备尺寸也有相当多的嗡嗡声。

这是纯粹的推测,但我不认为他们的风景状态栏将在iOS 8中返回。

斯威夫特3

override func viewDidLoad() {
        super.viewDidLoad()
        UIApplication.shared.setStatusBarHidden(true, with: .none)
        UIApplication.shared.setStatusBarHidden(false, with: .none)
///
    }

并在Info.plist添加:

UIViewControllerBasedStatusBarAppearance布尔值NO

Swift 3 (截至2017年6月2日)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var prefersStatusBarHidden : Bool {
    return false
}

我们按照上述步骤修复了它,并确保左右两侧的景观都已启用。

在项目/目标/部署信息下

在此输入图像描述

我们通过强制用户看不到方向改变来解决这个问题。 在加载的第一个视图控制器中,添加:

- (void)viewWillAppear:(BOOL)animated
{
    NSNumber *orientationLeft = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
    NSNumber *orientationRight = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
    [[UIDevice currentDevice] setValue:orientationLeft forKey:@"orientation"];
    [[UIDevice currentDevice] setValue:orientationRight forKey:@"orientation"];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM