ChatGPT解决这个技术问题 Extra ChatGPT

如何隐藏iOS状态栏

在我的 iOS 视频应用中,状态栏隐藏在某些视图控制器中。我已经使用以下代码完成了这项工作。

[[UIApplication sharedApplication] setStatusBarHidden:YES];

它适用于 iOS 5 和 iOS 6 ,但不适用于 iOS 7。

我特别尝试了这个视图控制器,

例如:

-(BOOL)prefersStatusBarHidden { return YES; }

它运作良好,但我无法在父视图控制器中再次显示状态栏。

如果在 Storyboard 中设置了状态栏样式,则在更改“基于视图控制器的状态栏”(如下)后,可能必须在 plist 中设置样式,因为将不再使用视图控制器设置。 stackoverflow.com/questions/18924345/…
我在另一个问题中回答。尝试这个。 [以编程方式隐藏状态栏的最简单方法][1] [1]:stackoverflow.com/a/27339754/3718498
我使用了一个技巧 - 我将它发布为 pod cocoapods.org/pods/UIViewController+ODStatusBar,我希望它对任何人都有用
这里的答案现在已被弃用。在隐藏状态栏仅用于启动屏幕时,我无法找到适用于 iOS 9 的正确答案,因此请在下方链接,以便其他人更容易找到如何操作:stackoverflow.com/questions/34413848/…

R
Rajneesh071

您应该将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“否”。

https://i.stack.imgur.com/H75kH.png


作为参考,原始键是 UIViewControllerBasedStatusBarAppearance
@Rajneesh071 如果我想为我需要的工作设置 PreferredStatusBarStyle "View controller-based status bar appearance" set it to "YES".,我需要做什么?
你面临什么问题?
似乎已弃用,会破坏您的应用
S
Shekhar Gupta

将以下内容添加到您的 Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

https://i.stack.imgur.com/PpFl3.png


C
Community

在 viewdidload 中添加以下行

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];

并添加新方法

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

还更改 info.plist 文件查看基于控制器的状态栏外观" = NO

它对我有用


感谢这个为我工作,但我还需要在 plist 中添加下面的行。 "查看基于控制器的状态栏外观" = NO i,e 在 viewdidload [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade] 中添加以下行并添加新方法 - (BOOL)prefersStatusBarHidden { return YES;在 Plist 文件中添加“查看基于控制器的状态栏外观”= NO
prefersStatusBarHidden 是什么对我有用(无论是这个解决方案还是其他类似的解决方案)
G
Gurumoorthy Arumugam

在 Plist 中添加以下属性。

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

现在状态栏将隐藏。


原始键是 UIStatusBarHidden 和 UIViewControllerBasedStatusBarAppearance
R
Rajesh Loganathan

试试这个简单的方法:

目标-C:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}

迅速:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

这是一个很棒的答案!还可以尝试各种UIStatusBarAnimation,它们非常棒。
不要忘记 [super viewWillAppear:animated][super viewWillDisappear:animated]
这个简单的解决方案适用于我的 iOS 10。做一个简单的人!
'setStatusBarHidden:withAnimation:' 已弃用:在 iOS 9.0 中首次弃用 - 使用 -[UIViewController prefersStatusBarHidden]
s
smartbot

我做了以下,它似乎工作(即使在 iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}

C
Chris

UIApplication.setStatusBarX 自 iOS9 起已弃用

在 info.plist 中不推荐使用 UIViewControllerBasedStatusBarAppearance=NO

所以我们应该在我们所有的视图控制器中使用preferredStatusBarX

但是当涉及到 UINavigationController 时,它会变得更有趣:

如果navigationBarHidden = true,则调用子UIViewController 的preferredStatusBarX,因为子在状态栏下显示内容。

如果navigationBarHidden = false,则调用UINavigationController 的preferredStatusBarX,毕竟它是在状态栏下显示内容。

UINavigationController 的默认preferredStatusBarStyle 使用来自UINav.navigationBar.barStyle 的值。 .Default = 黑色状态栏内容,.Black = 白色状态栏内容。

因此,如果您将 barTintColor 设置为某种自定义颜色(您可能是),您还需要将 barStyle 设置为 .Black 以获取白色状态栏内容。在设置 barTintColor 之前,我会将 barStyle 设置为黑色,以防 barStyle 覆盖 barTintColor。

另一种选择是您可以继承 UINavigationController 而不是使用 bar 样式。

但是,如果您继承 UINavigationController,如果 navigationBarHidden = true,您将无法控制状态栏。在这种情况下,UIKit 在不询问 UINavigationController 的情况下以某种方式直接访问子 UIViewController。我原以为 UINavigationController 有责任问孩子>耸耸肩<。

如果 modalPresentationStyle = .FullScreen,模态显示的 UIViewController 只会在状态栏中有发言权。

如果你有一个自定义展示风格的模态视图控制器并且你真的希望它来控制状态栏,你可以设置 modalPresentationCapturesStatusBarAppearance = true。


为什么苹果不能只听从一条建议?如果它没有损坏,请不要修复它!
S
Shaik Riyaz

要在 iOS7 中隐藏状态栏,您需要 2 行代码

在 application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中写入 [[UIApplication sharedApplication] setStatusBarHidden:YES];在 info.plist 添加这个基于 View-Controller 的状态栏外观 = NO


h
hbk

为了更好地理解,添加一些带有评论的照片:

任何更改之前的应用程序

https://i.stack.imgur.com/NRlWJ.png

在名为 Supporting FilesProject Navigator 文件夹中找到并单击 *.plist 文件

https://i.stack.imgur.com/Yg0B2.png

之后,您将获得应用程序的不同设置。您需要添加 2 个键 UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance。您只需单击 + 按钮即可执行此操作

https://i.stack.imgur.com/yC3rh.png

按 + 后,您可以选择其中一个键 - 开始输入。

正确版本:

https://i.stack.imgur.com/hrlze.png

最后应用此更改后的应用程序:

https://i.stack.imgur.com/WQv1g.png

此外,您还可以找到替代解决方案 here


a
andrewz

在 iOS10 中,我需要做的就是覆盖 RootViewController (Swift) 中的 prefersStatusBarHidden 变量:

override var prefersStatusBarHidden: Bool {
    return true
}

J
Jerry Chong

斯威夫特 5

使用以下步骤隐藏 iOS 状态栏:

在 Info.plist 上打开。添加新的键基于视图控制器的状态栏外观和值设置为 NO。添加新键 状态栏最初是隐藏的,值设置为 YES。重新编译项目。状态栏现在应该隐藏在 iOS 手机上。

最终设置截图:

https://i.stack.imgur.com/u2HIi.png

这适用于 Xcode 10.2


即使使用 swiftui(当 .statusbar 修饰符什么都不做时),这对我也有用
K
Kemal Can Kaynak

试试看;

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

伟大的。我可以使用它来隐藏视图控制器上不需要的状态栏,然后在用户登录后取消隐藏它。
K
Ketan P

iOS 9 及以上版本:

由于 statusBarHidden 方法已从 iOS9弃用,您需要在 plist 中添加两个值,如下所示:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

或通过用户界面请参考下图:

https://i.stack.imgur.com/sFU1R.png

由于 statusBarHidden 已从 iOS9弃用

@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


k
katzenhut

在 iOS7 中隐藏状态栏:

打开您的 plist 文件,然后添加一个名为 “查看基于控制器的状态栏外观” 的行并将其值设置为 NO


D
David H

这是 Swift 版本(iOS9 之前):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

这也适用(iOS7+):

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

您还需要致电:

setNeedsStatusBarAppearanceUpdate()

在说viewDidLoad()

请注意,如果您使用 SplitView 控制器或其他一些 container 视图控制器,您还需要让它在发送 childViewControllerForStatusBarHidden 时返回您的类。一种方法是为 statusController 提供一个公共的弱 var,并在这个被覆盖的方法中返回它。


iOS8 中不推荐使用顶部块 - 使用您的第二种方法。谢谢!我编辑了代码以添加另一个强制调用。
M
MANISH PATHAK

SWIFT 3+(iOS 9、10)的固定解决方案

1- 在 info.plist 设置下面的属性

https://i.stack.imgur.com/f56qR.png

2-将下面的代码粘贴到根控制器,到

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

您可以调用 isStatusBarHidden = trueisStatusBarHidden = false 在您想要的位置 hide/show 状态栏


b
bLacK hoLE

您应该将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“否”。


A
Ashu

iOS 隐藏状态栏步骤 1. 打开 AppDelegate.m 文件,在 didFinishLaunchingWithOptions 方法中添加 application.statusBarHidden

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }

打开 info.plist 并设置

View controller-based status bar appearance 设置 NO


T
Tony

UIKit>UIApplication.h

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

所以应该将 View controller-based status bar appearance 设置为 NO


S
SmileBot

要回答 Susitha 的问题:使用 setNeedsStatusBarAppearanceUpdate。这将调用 prefersStatusBarHidden 以刷新您所需的状态栏状态。尝试这个:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

如果您想再次查看状态栏,请将您的属性 hideStatusBar(或您所称的任何名称)设置为 NO。通过再次调用来间接调用 preferStatusBarHidden

[self setNeedsStatusBarAppearanceUpdate]

P
Prazgaitis

Swift 3 的更新:

使用以下信息更新 Info.plist:

View controller-based status bar appearance: NO

然后,在 ViewController 或其他地方:

UIApplication.shared.isStatusBarHidden = true