画面上部のステータスバーを削除したいのですが。
これは動作しません:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
application.statusBarHidden = true
return true
}
私も試してみました:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
var controller = UIViewController()
application.statusBarHidden = true
controller.setNeedsStatusBarAppearanceUpdate()
var view = UIView(frame: CGRectMake(0, 0, 320, 568))
view.backgroundColor = UIColor.redColor()
controller.view = view
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(160, 284)
label.textAlignment = NSTextAlignment.Center
label.text = "Hello World"
controller.view.addSubview(label)
self.window!.rootViewController = controller
self.window!.makeKeyAndVisible()
return true
}
あなたは本当にあなたのビューコントローラにprefersStatusBarHiddenを実装するべきです:
Swift 2
override func prefersStatusBarHidden() -> Bool {
return true
}
Swift 3以降
override var prefersStatusBarHidden: Bool {
return true
}
メソッド内にコードを追加します
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
完了しました。アプリを実行して、ステータスバーはもう必要ありません。
Swift 3
Info.plist
でView controller-based status bar appearance
をNO
に設定します
そしてUIApplication.shared.isStatusBarHidden = true
を呼び出します
あなたが表示し、却下しながら、あなたが非表示にしてボタンをタップのステータスバーを戻したい場合スライドインメニュー、ポップアップなど、その後、この方法を使用することができます -
ステータスバーを隠すには: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
ステータスバーを元に戻すには: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal
IOS 10/Swift 3.0用のアップデート
もはや機能ではなくなり、プロパティになりました...
override var prefersStatusBarHidden: Bool {
return true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true);
navigationController?.navigationBar.hidden = true // for navigation bar hide
UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
swift 3.xでは:
override func viewWillAppear(_ animated: Bool) {
UIApplication.shared.isStatusBarHidden = true
}
そのため、ここでの問題は実際にはSwiftとは無関係ですが、iOS 7以降ではステータスバーの外観がどのように処理されるかだけです。
デフォルトでは、View Controllerは、画面に表示されているときのステータスバーの外観を個別に制御します。ステータスバーを制御するためにこの方法を使用したい場合は、外観を変更したいView Controllerに対して以下の方法をオーバーライドすることができます。
prefersStatusBarHidden
、preferredStatusBarStyle
、preferredStatusBarAnimation
、
あなたの場合は、prefersStatusBarHidden
を実装してtrue
を返すだけです。
もう1つの方法は、アプリケーションレベルでステータスバーの外観を制御することです。これはあなたが実際にやろうとしていることのようです(application.statusBarHidden
を設定することによって)。
これを機能させるには、アプリのInfo.plist
ファイルを開き、キーUIViewControllerBasedStatusBarAppearance
を追加して、それにNO
の値を与える必要があります。
私は実際にこれを考え出しました。私のソリューションを別の選択肢として追加します。
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
さて、iOS 9はUIApplication.sharedApplication().statusBarHidden = true
やのように、ここで述べた方法のどれもサポートしていないので、これは私にとって問題になります。
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
と
override func prefersStatusBarHidden() -> Bool {
return true
}
動作しますが、私は条件で変更することができますプログラム可能な解決策を提供していません。 (statusBarHidden = true
とstatusBarHidden = false
は以前に行ったように).
この狂気に対する解決策:
以下のようにprefersStatusBarHidden()
に追加することで、あなたのinfo.plistにUIViewControllerBasedStatusBarAppearance
設定を追加することなく、プログラムでステータスバーの表示/非表示を制御できます。
var showStatusBar = true
override func prefersStatusBarHidden() -> Bool {
if showStatusBar {
return false
}
return true
}
private func showStatusBar(enabled: Bool) {
showStatusBar = enabled
prefersStatusBarHidden()
}
それからあなたのコード全体でこのようにそれを使ってください:
//Hide Status Bar
showStatusBar(false)
OR
//Show Status Bar
showStatusBar(true)
swift 4.2では、現在プロパティです。
override var prefersStatusBarHidden: Bool {
return true
}
prefersStatusBarHidden
メソッドまたは変数をオーバーライドするときは、Info.plistのView controller-based status bar appearance
をYESにする必要があります。それ以外の場合、オーバーライドは効果がありません。
私の場合、オンデマンドで表示または非表示にするステータスバーを探していました。ビューがロードまたは表示されなくなったときだけではありません。
スイフト3.x
//show status bar initially
var showStatusBar = true
//set the parameters
override var prefersStatusBarHidden: Bool {
if showStatusBar == true {
//does not prefer status bar hidden
print("does not prefer status bar hidden")
return false
} else {
//does prefer status bar hidden
print("does prefer status bar hidden")
return true
}
}
//ex: hide status bar and call parameter function again whenever you want
showStatusBar = false
setNeedsStatusBarAppearanceUpdate()
プロジェクトの[全般] - > [デプロイメント情報] - > [ステータスバーのスタイル]で[ステータスバーを隠す]のチェックマークをオンにします。注: - アプリケーション全体でステータスバーを非表示にします。
スイフト4
//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false
//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true
Swift 4以降の場合は、次のコードを試してください(Swift 4.0、4.1 - IOS 10、11でテスト済み)。
override var prefersStatusBarHidden: Bool { return true }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// call this func to force preferredStatusBarStyle to be read again.
setNeedsStatusBarAppearanceUpdate()
}
Swift 5:メインビューコントローラー、またはメインナビゲーションコントローラーがある場合は、
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override var prefersStatusBarHidden: Bool {
return false
}
また、plistの「View controller-based status bar Appearance」はYESでなければなりません。そうでない場合、上記のコードは呼び出されません。
アプリの起動時にステータスバーを非表示にする場合、plistの「ステータスバーは最初は非表示」がYESである必要があります。これにより、画面上部に余分な青いバーが表示されたときに起動画像が歪むのを防ぐことができます。
私のために働く解決策。ロード中に特定のView Controllerのステータスバーを非表示にする場合は、次の手順を実行します。
import UIKit
class ViewController: UIViewController {
private var hideStatusBar: Bool = false
override var prefersStatusBarHidden: Bool {
return hideStatusBar
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundcolor = .white
hideStatusBar = true
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
重要:キー「View Controllerベースのステータスバーの外観」を「NO "info.plistでは上記のコードは機能しません。キーを "YES"またはremoveに設定します。 info.plistから
プロジェクト - >一般 - >配置情報
ステータスバーのスタイル: -
ステータスバーを非表示にする(iOS 10)
このコードをあなたのViewController
Class
scope
で使うことができます。
open override var prefersStatusBarHidden: Bool { return true }
View Controllerをモーダルモードで表示している場合は、試してください。
viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
私は10.1に設定されたデプロイメントターゲットでXcode 8.1(8B62)を使用しています、そして私は上で述べられた上書きオプションであまり運がありませんでした。しかし、展開情報の[ステータスバーを隠す]オプションをチェックしてもうまくいきませんでした。
これが役に立つことを願っています。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.isStatusBarHidden = true
return true
}