[英]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
}
您還可以使用以下兩種方法修改其外觀: preferredStatusBarStyle
和preferredStatusBarUpdateAnimation
例
我做了一個簡單的項目來說明這一點。 可以通過許多不同的方式實現側邊欄,因此,我將本示例基於彈出框。 您的實現方式將取決於您如何實現側邊欄。
我用兩個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
}
}
更新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.