সুইফটে স্থিতি বারের উচ্চতা


101

আমি কীভাবে স্থিতি বারের উচ্চতা প্রোগ্রামে সুইট-এ পেতে পারি?

অবজেক্টিভ-সিতে এটি এর মতো:

[UIApplication sharedApplication].statusBarFrame.size.height.

উত্তর:


246

সুইফট ২.x নিয়ে কোনও সমস্যা আছে :

UIApplication.sharedApplication().statusBarFrame.size.height

সুইফট 3 বা সুইফট 4 :

UIApplication.shared.statusBarFrame.height

UIKitআমদানি হয়েছে তা নিশ্চিত করুন

import UIKit

আইওএস 13-এ, আপনি অবহেলিত সতর্কতা পাবেন "

আইওএস ১৩.০-তে 'স্ট্যাটাস বারফ্রেম' অবমূল্যায়ন করা হয়েছিল: এর পরিবর্তে উইন্ডো দৃশ্যের স্ট্যাটাস বারম্যানেজার বৈশিষ্ট্যটি ব্যবহার করুন।

এটি ঠিক করতে:

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

4
সুইফট 3 এর জন্য নতুন সিনট্যাক্স:UIApplication.shared.statusBarFrame.size.height
ডক

4
আপনি sizeসুইফ্ট 3 এ বাদ দিতে পারেন : UIApplication.shared.statusBarFrame.heightযথেষ্ট।

4
ধন্যবাদ, আইফোন এক্স
মারিও বুর্গা

আসুন উচ্চতা = দ্য উইন্ডো? 0 আসলে 0 আসছেন
অদম্য_পেন

@ অবিভাজনীয়_পেন সম্ভবত এটি কারণ আপনার বর্তমান উইন্ডোটি এখনও লোড হয়নি, তাই এটির view.window?সাথে প্রতিস্থাপন করুনUIApplication.shared.keyWindow?
করণ পাল ২

9

আপডেট উত্তর আইওএস 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
}

শুভ কোডিং!


4
একটু ঝাপটায়, এটিকে একটি স্ট্যাটিক ভার তৈরি করুন, তারপরে অ্যাক্সেসটি আরও পরিষ্কার ie ইউআইএপ্লিকেশন.স্ট্যাটাসবারহাইট
পিটার

4
এটি আসলে বিশ্বব্যাপী ফাংশন হিসাবে প্রয়োগ করা হয়। স্ট্যাটিক ভার বানানো সুবিধাজনক হবে যদি আমি এটিকে কোনও শ্রেণীর ভিতরে গুটিয়ে রাখি।
মোঃ ইব্রাহিম হাসান

5

সুইফট একটি পৃথক ভাষা। এপিআই উপাদানগুলি একই। সম্ভবত এরকম কিছু:

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

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

2

এটি ঠিক উদ্দেশ্য-সি এর মতো:

var screenStatusBarHeight: CGFloat {
    return UIApplication.sharedApplication().statusBarFrame.height
}

এটি এতে স্ট্যান্ডার্ড ভেরিয়েবল হিসাবে অন্তর্ভুক্ত রয়েছে:

https://github.com/goktugyil/EZSwiftExtensions


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

আমার swiftUI প্রকল্পে, এটি কাজ করেছে।

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.