仅在一个ViewController中显示/隐藏状态栏,目标C,iOS

问题描述 投票:3回答:3

我希望状态栏显示在viewWillAppear()中并在viewController的viewWillDisappear()中消失

我在用

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

但它在iOS 9.0中已弃用

我在用

UIApplication.shared.isStatusBarHidden = false

在快速,但在目标C这是只读价值...

prefersStatusBarHidden对我来说也不起作用,因为我需要在viewWillDisappear()函数中隐藏状态栏

-(BOOL)prefersStatusBarHidden{
    return YES;
}

有谁能够帮我?

ios objective-c statusbar
3个回答
4
投票

对于每个视图控制器,您想要更改状态栏的可见性,您需要覆盖prefersStatusBarHidden。为了实际工作,您必须在项目的Info.plist中添加以下键/值:

关键:View controller-based status bar appearance

价值:YES


要控制viewWillAppearviewWillDisappear中状态栏的可见性,您可以执行以下操作:

var statusBarHidden = false

override func viewWillAppear() {
    super.viewWillAppear()
    statusBarHidden = false
    self.setNeedsStatusBarAppearanceUpdate()
}

override func viewWillDisappear() {
    super.viewWillDisappear()
    statusBarHidden = true
    self.setNeedsStatusBarAppearanceUpdate()
}

override var prefersStatusBarHidden: Bool {
    return statusBarHidden
}

0
投票

对于Swift 3,

override var prefersStatusBarHidden: Bool{
        return true
    }

并添加viewDidLoad()

self.modalPresentationCapturesStatusBarAppearance = true

0
投票

为Objective-C编写示例(与@dennykim编写的SWIFT相同的代码)

  1. 为BOOL创建属性

@property(nonatomic,assign)BOOL statusBarHidden;

  1. 在info.plist中设置查看基于控制器的状态栏外观== YES
  2. 转到ViewController并编写下一个代码:

- (无效)viewWillAppear中:(BOOL)动画{

[super viewWillAppear:animated];

self.statusBarHidden = TRUE;
[self setNeedsStatusBarAppearanceUpdate];
}
-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];

    self.statusBarHidden = FALSE;
    [self setNeedsStatusBarAppearanceUpdate];   
}

- (BOOL)prefersStatusBarHidden {
    return self.statusBarHidden;
}
© www.soinside.com 2019 - 2024. All rights reserved.