簡體   English   中英

如何更改狀態欄的框架?

[英]How can I change the frame of the status bar?

我嘗試使用它來獲取狀態欄的框架:

var statusBarWindow = UIApplication.sharedApplication().valueForKey("statusBarWindow")

但是,當我嘗試更改框架時,它表示該值是不可變的:

statusBarWindow?.frame = CGRect(x: -oldViewFrame, y: statusBarWindow.frame.origin.y, width: statusBarWindow.frame.size.width, height: statusBarWindow.frame.size.height)

我將根據您對這個問題的意圖發表的評論為您提供答案。


通過覆蓋UIViewController中的側邊欄方法prefersStatusBarHidden ,可以在打開側邊欄(類似於Slack應用程序)時使狀態欄消失。 它應該類似於以下內容:

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

您還可以使用以下兩種方法修改其外觀: preferredStatusBarStylepreferredStatusBarUpdateAnimation


我做了一個簡單的項目來說明這一點。 可以通過許多不同的方式實現側邊欄,因此,我將本示例基於彈出框。 您的實現方式將取決於您如何實現側邊欄。

我用兩個UIViewController和一個UIButton制作了一個簡單的情節UIButton 當單擊第一個UIButton ,它將觸發一個類型為Present As Popover的segue,它將顯示第二個控制器。

第一個UIViewController中沒有代碼(所有操作都在情節提要中完成),但是第二個UIViewController具有用於隱藏狀態欄的代碼。

我已經附上了情節提要的屏幕快照和下面的第二個UIViewController的代碼。

//
//  PopController.swift
//  SidebarHideStatus
//
//  Created by Stefan Veis Pennerup on 31/01/16.
//  Copyright © 2016 Kumuluzz. All rights reserved.
//

import UIKit

class PopController: UIViewController {

    // MARK: - Storyboard actions

    @IBAction func backButtonPressed(sender: UIButton) {
        dismissViewControllerAnimated(true, completion: nil)
    }

    // MARK: - Status bar

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

示例項目的情節提要,突出顯示附加到<code> UIButton </ code>的segue


更新1 :OP在側邊欄使用UIView而不是UIViewController

首先,我建議您將側邊欄分解為單獨的UIViewController因為它將在將來使它更加可重用,但這是一個完全不同的討論,可能會持續數天!

為了隱藏狀態欄,那么您仍然需要使用我之前強調的回調方法,但是您只需調用方法setNeedsStatusBarAppearanceUpdate即可對其進行手動更新。

我已使用以下代碼更新了初始UIViewController並刪除了segue以演示此方法。

//
//  ViewController.swift
//  SidebarHideStatus
//
//  Created by Stefan Veis Pennerup on 31/01/16.
//  Copyright © 2016 Kumuluzz. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    // MARK: - Properties

    private var isSidebarShown = false

    // MARK: - Storyboard outlets

    @IBAction func buttonPressed(sender: UIButton) {
        isSidebarShown = !isSidebarShown
        setNeedsStatusBarAppearanceUpdate()
    }

    // MARK: - Status bar

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

    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
        // NOTE: This method has no effect now when
        // using the method setNeedsStatusBarAppearanceUpdate()
        return .Slide
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM