स्विफ्ट में स्थिति बार ऊंचाई


98

मैं स्विफ्ट में प्रोग्राम बार की ऊंचाई कैसे प्राप्त कर सकता हूं?

उद्देश्य-सी में, यह इस प्रकार है:

[UIApplication sharedApplication].statusBarFrame.size.height.

जवाबों:


243

क्या स्विफ्ट 2.x के साथ कोई समस्या है :

UIApplication.sharedApplication().statusBarFrame.size.height

स्विफ्ट 3 या स्विफ्ट 4 :

UIApplication.shared.statusBarFrame.height

सुनिश्चित करें कि UIKitआयातित है

import UIKit

IOS 13 में, आपको एक विकृत चेतावनी मिलेगी "

iOS 13.0 में 'statusBarFrame' पदावनत किया गया: इसके बजाय विंडो दृश्य के statusBarManager संपत्ति का उपयोग करें।

इसे ठीक करने के लिए:

let height = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0

1
स्विफ्ट 3 के लिए नया वाक्यविन्यास:UIApplication.shared.statusBarFrame.size.height
DoK

4
आप sizeस्विफ्ट 3 में छोड़ सकते हैं : UIApplication.shared.statusBarFrame.heightपर्याप्त है।
जॉर्न

1
धन्यवाद, यह iPhone X पर एक अतिप्रवाह समस्या के लिए बहुत मददगार था
मारियो दुर्गा

चलो ऊंचाई = view.window? .windowScene ?statusBarManager? .statusBarFrame.height ?? 0 वास्तव में 0 लौट रहा है
अजेय_पैन

@Invincible_Pain यह शायद इसलिए है आपकी वर्तमान विंडो अभी तक लोड नहीं की गई है, इसलिए की जगह view.window?के साथUIApplication.shared.keyWindow?
करण पाल

5

स्विफ्ट सिर्फ एक अलग भाषा है। एपीआई तत्व समान हैं। शायद कुछ इस तरह:

let app = UIApplication.sharedApplication()
let height = app.statusBarFrame.size.height

5

अद्यतित उत्तर आईओएस 13+ और पुराने आईओएस वर्जन स्विफ्ट 5 के लिए

 func getStatusBarHeight() -> CGFloat {
    var statusBarHeight: CGFloat = 0
    if #available(iOS 13.0, *) {
        let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
        statusBarHeight = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
    } else {
        statusBarHeight = UIApplication.shared.statusBarFrame.height
    }
    return statusBarHeight
}

हैप्पी कोडिंग!


1
थोड़ा ट्विक करें, इसे स्टैटिक वर्जन बनाएं, फिर एक्सेस ज्यादा क्लियर यानी। UIApplication.statusBarHeight
पीटर सुवारा

यह वास्तव में एक वैश्विक कार्य के रूप में कार्यान्वित किया जाता है। यदि मैं इसे एक वर्ग के अंदर लपेटता हूं तो एक स्थिर संस्करण बनाना सुविधाजनक होगा।
मो। इब्राहिम हसन

4

यही है वह जो मेरे द्वारा उपयोग किया जाता है:

struct Screen {
    static var width: CGFloat {
        return UIScreen.main.bounds.width
    }
    static var height: CGFloat {
        return UIScreen.main.bounds.height
    }
    static var statusBarHeight: CGFloat {
        return UIApplication.shared.statusBarFrame.size.height
    }
}

तो आप कर सकते हैं:

Screen.statusBarHeight


1

इब्राहिम से जवाब:

extension UIApplication {
    static var statusBarHeight: CGFloat {
        var statusBarHeight: CGFloat = 0
        if #available(iOS 13.0, *) {
            let window = shared.windows.filter { $0.isKeyWindow }.first
            statusBarHeight = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
        } else {
            statusBarHeight = shared.statusBarFrame.height
        }
        return statusBarHeight
    }
}

0

मेरे स्विफ्टयूआई प्रोजेक्ट पर, इसने काम किया।

import UIKit
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let contentView = ContentView()
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            
            if let statusBarHeight = window.windowScene?.statusBarManager?.statusBarFrame.height {
            SceneDelegateDataGetter.shared.height = statusBarHeight
            }
            
            window.rootViewController = HostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }
    }

class SceneDelegateDataGetter {
    static let shared = SceneDelegateDataGetter()
    
    public fileprivate(set) var height: CGFloat = 0
}

जब उपयोग करें,

SceneDelegateDataGetter.shared.height
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.