首页 文章

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

提问于
浏览
3

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

我在用

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

但它在iOS 9.0中已弃用

我在用

UIApplication.shared.isStatusBarHidden = false

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

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

-(BOOL)prefersStatusBarHidden{
    return YES;
}

有谁能够帮我?

3 回答

  • 4

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

    Key: View controller-based status bar appearance

    Value: 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相同的代码)

    • 为BOOL创建属性

    @property(nonatomic,assign)BOOL statusBarHidden;

    • 在info.plist中设置 View controller-based status bar appearance == YES

    • 转到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;
    }
    

相关问题