আইওএস 8-এ সুইফ্ট ব্যবহার করে নির্দিষ্ট ভিউকন্ট্রোলারদের জন্য স্ট্যাটাস বারের রঙ পরিবর্তন করা


190
override func preferredStatusBarStyle() -> UIStatusBarStyle {
 return UIStatusBarStyle.LightContent;
}

নির্দিষ্ট ভিউকন্ট্রোলারের জন্য স্ট্যাটাস বারের রঙ সেট করতে কোনও ভিউকন্ট্রোলারের উপরের কোডটি আমার জন্য আইওএস 8 তে কাজ করে না । কোনও পরামর্শ? ইউআইএপ্লিকেশন.শ্রেড অ্যাপ্লিকেশন পদ্ধতিটি ব্যবহার করে পুরো অ্যাপ্লিকেশনটির জন্য তথ্য.প্লেস্টে প্রয়োজনীয় পরিবর্তনগুলির পরে রঙ পরিবর্তন হয়।

// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

কিছু প্রয়োজনীয় এবং নির্দিষ্ট ভিউকন্ট্রোলারদের জন্য আমি কীভাবে কেবল স্ট্যাটাস বারের রঙে পরিবর্তন করতে পারি ?

উত্তর:


348

সমস্ত প্রস্তাবনাগুলি পড়ার পরে এবং কয়েকটি জিনিস চেষ্টা করার পরে, আমি নিম্নলিখিত ধাপগুলি ব্যবহার করে নির্দিষ্ট দর্শকদের জন্য এটি কাজ করতে পারি:

প্রথম ধাপ:

আপনার info.plist খুলুন এবং "নামের একটি নতুন কী ঢোকান দেখুন নিয়ামক ভিত্তিক স্ট্যাটাস বার চেহারা থেকে" কোন

দ্বিতীয় পদক্ষেপ (কেবল একটি ব্যাখ্যা, এটি বাস্তবায়নের দরকার নেই):

সাধারণত আমরা অ্যাপ্লিকেশনটিতে নিম্নলিখিত কোডগুলি রাখি (_: didFinishLaunchingWithOptions :) অ্যাপডেলিগেটের পদ্ধতি,

সুইফট 2

UIApplication.sharedApplication().statusBarStyle = .LightContent

সুইফট 3

UIApplication.shared.statusBarStyle = .lightContent

তবে এটি সমস্ত ভিউকন্ট্রোলারকে প্রভাবিত করে statusBarStyle

সুতরাং, নির্দিষ্ট ভিউ নিয়ন্ত্রণকারীদের জন্য কীভাবে এটি কাজ করা যায় - চূড়ান্ত পদক্ষেপ:

আপনি যেখানে পরিবর্তন করতে চান statusBarStyleএবং সেখানে নীচের কোডটি রাখতে চান সেখানে ভিউ কন্ট্রোলার ফাইলটি খুলুন viewWillAppear(),

সুইফট 2

UIApplication.sharedApplication().statusBarStyle = .LightContent

সুইফট 3

UIApplication.shared.statusBarStyle = .lightContent

এছাড়াও, viewWillDisappear()সেই নির্দিষ্ট ভিউ কন্ট্রোলারের জন্য পদ্ধতিটি বাস্তবায়ন করুন এবং নিম্নলিখিত কোডের লাইনগুলি রাখুন,

সুইফট 2

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default

}

সুইফট 3

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}

এই পদক্ষেপটি প্রথমে statusBarStyleনির্দিষ্ট ভিউকন্ট্রোলারের জন্য পরিবর্তন করবে এবং তারপরে defaultনির্দিষ্ট ভিউকন্ট্রোলার অদৃশ্য হয়ে গেলে এটিকে আবার ফিরিয়ে দেবে । বাস্তবায়ন না করা স্থায়ীভাবে নতুন সংজ্ঞাযুক্ত মানটিতে viewWillDisappear()পরিবর্তিত হবেstatusBarStyleUIStatusBarStyle.LightContent


4
নোট করুন যে আপনি Status bar is initially hidden = YESযদি তথ্য.পলিট ফাইলে সেট করেন তবে "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন = কোনও নয়" এর ফলে স্ট্যাটাস বারটি লুকিয়ে থাকবে।
xi.lin

13
তোমার কাছে ফিরে পরিবর্তন হয় UIStatusBarStyle.Defaultব্যবহার viewWillDisappear(), আপনি ব্যবহার করা উচিত viewWillAppear()এটি আরম্ভ করতে বদলে viewDidLoad().... অন্যথায় যদি আপনি এটি পুনরায় লোড করেও ফিরে দৃশ্যে আসা, আপনি দেখতে পাবেন না StatusBarStyleআপনি আশা করছে।
উইলিয়াম জিপি

7
সুইফ্ট 3 এর জন্য: UIApplication.shared.statusBarStyle = .lightContent
ইব্রাহিমিলাজম

4
এটি আপনি এখনও কীভাবে স্ট্যাটাস বারের রঙ পরিবর্তন করেন তা এখনও পরিষ্কার নয়
DoruChidean

4
ছেলেরা, এটি আইওএস 9 থেকে
প্রত্যাশিত

109

(20 সেপ্টেম্বর, 2019 হিসাবে)

সুইফট 5 , সুইফট 4.2 , সুইফট 4

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    .lightContent
}

7
আপনি super.viewWillAppearযদি এই কোডটি অনুলিপি করে আটকে দিচ্ছেন তবে কল করতে ভুলবেন না
স্টিফেন সিলবার

সুপার.ভিউউইল অ্যাপয়ার () অন্তর্ভুক্ততে সম্পাদিত। টিপটির জন্য ধন্যবাদ @ স্টেফেনসিলবার!
বেনি TheNerd

আপনাকে পছন্দসই স্ট্যাটাস স্টাইলকে ওভাররাইড করতে হবে বা এটি কাজ করবে না। যে ইশারা জন্য ধন্যবাদ. +1 টি
এ Alix

3
UIApplication.shared.statusBarStyle = .lightContentএই সংকলক সতর্কতায় ফলাফল ব্যবহার করে : আইওএস 9.0-এ 'স্ট্যাটাসবার্ট স্টাইল'-এর জন্য সেটটার অবনতি হয়েছে: ব্যবহার করুন - [
ইউআইভিউকন্ট্রোলার

3
আপনার অ্যাপ্লিকেশনটির ইনফো.লিস্টে, "দেখুন কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি" হ্যাঁ সেট করুন
ইভানপ্যাভলুক

29

আমি এই টিউটোরিয়ালটি অনুসরণ করেছি এবং এটি আমার পক্ষে কাজ করেছে। যাইহোক, আমি কোনও সতর্কতা আছে কিনা তা নিশ্চিত নই।

https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift

  • আপনার info.plist খুলুন এবং সেট UIViewControllerBasedStatusBarAppearanceকরুন false
  • প্রথম ফাংশনে AppDelegate.swift, যা ধারণ করে didFinishLaunchingWithOptions, আপনার পছন্দ মতো রঙ সেট করুন।

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

  • সুইফট 3 আপডেট *

    UIApplication.shared.statusBarStyle = .লাইট কনটেন্ট


11
প্রতিটি ভিউ কন্ট্রোলারের সাথে এটি কীভাবে সুনির্দিষ্ট
ইয়ার্নিও

4
হুবহু, এটি সম্পূর্ণ অ্যাপ্লিকেশনটির জন্য, এবং এটি প্রশ্ন নয়।
অনুজ

3
আমি আইওএস 8 সুইফট এবং এক্সকোড 6.1.1 ব্যবহার করছি এবং এই দুটি পদক্ষেপ অনুসরণ করে কোনও কাজ হয় না। আপনাকে UIApplication.sharedApplication().statusBarHidden = falseঅ্যাপডেলিগেট.সুইফ্টডডফিনিশল্যাচিং উইথঅ্যাপশনগুলিতেও যুক্ত করতে হবে
আহমদ আমিন

এটি পুরো অ্যাপ্লিকেশনটির জন্য সেট করে। নির্দিষ্ট দর্শন নিয়ন্ত্রকদের জন্য, প্রথম উত্তরটি দেখুন। এটা আমার জন্য কাজ করেছে।
অক্ষর প্যাটেল

আইওএস 9.0 তে 'স্ট্যাটাসবার্ট স্টাইল'-এর সেটার অবনতি হয়েছে: ব্যবহার করুন - [ইউআইভিউকন্ট্রোলার পছন্দসই স্ট্যাটাসবার্ট স্টাইল]
ওলেকসান্ডার

29

নেভিগেশনকন্ট্রোলারের সাথে সুইফট 4.2 সমাধান

প্রথম ধাপ:

আপনার info.plist খুলুন এবং "নামের একটি নতুন কী ঢোকান দেখুন নিয়ামক ভিত্তিক স্ট্যাটাস বার চেহারা " বা UIViewControllerBasedStatusBarAppearanceকরার হ্যাঁ প্রতিটি ভিসি তাদের নিজস্ব অবস্থা সম্পত্তি ব্যবহার করার অনুমতি দিতে।

দ্বিতীয় ধাপ

প্রতিটি ভিসিতে, পছন্দসই স্ট্যাটাসবার্ট স্টাইল সম্পত্তিটিকে এইভাবে ওভাররাইড করুন :

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent //.default for black style
}

শেষ পদক্ষেপ

আপনার কাস্টম নেভিগেশন নিয়ন্ত্রণকারী শ্রেণিতে পছন্দসই স্ট্যাটাস বারস্টাইল সম্পত্তি ওভাররাইড করুন :

class NavigationController : UINavigationController {

override var preferredStatusBarStyle : UIStatusBarStyle {

    if let topVC = viewControllers.last {
        //return the status property of each VC, look at step 2
        return topVC.preferredStatusBarStyle  
    }

    return .default
}

নেভিগেশন কন্ট্রোলার এবং আপনার নিজের নিয়ন্ত্রক ব্যবহার করে কীভাবে প্রত্যাশিত ফলাফল অর্জন করা যায় তা এই উপায়। এছাড়াও আপনি আমার প্রকল্পের জন্য যেমন পছন্দ করেছেন স্ট্যাটাস বারহিডেন এর জন্য এইভাবে করতে পারেন :)
আটারেশকভ

22

এখানে একটি বিলিয়ন উত্তর রয়েছে তাই আমি ভেবেছিলাম কেন একটি এক্সটেনশন আকারে (@ সিউরের সহায়তায়) অন্য একটি যুক্ত করবেন না?

সুইফট 3

এক্সটেনশান:

extension UIApplication {
    class var statusBarBackgroundColor: UIColor? {
        get {
            return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
        } set {
            (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
        }
    }
}

বাস্তবায়ন:

UIApplication.statusBarBackgroundColor = .blue

2
দয়া করে নোট করুন যে এই পদ্ধতির কোনও ব্যক্তিগত এপিআইতে অ্যাক্সেস বিবেচনা করা যেতে পারে এবং এর অর্থ অ্যাপল আপনাকে প্রত্যাখ্যান করবে।
JWhitey

বা কমপক্ষে এটি অ্যাপলের বাস্তবায়নের বিশদগুলির উপর নির্ভরশীল এবং আইওএসের পরিবর্তনের সাথে সতর্কতা ছাড়াই ভেঙে যেতে পারে।
ক্রিস প্রিন্স

19

আপনার ইনফো.পুলিস্টে আপনাকে কোনও মানতে কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি সংজ্ঞায়িত করতে হবে।

যদি আপনি এটি হ্যাঁ সংজ্ঞায়িত করেন তবে আপনার প্রতিটি ভিউ কন্ট্রোলারে পছন্দসই স্ট্যাটাসবার্ট স্টাইল ফাংশনটি ওভাররাইড করা উচিত।

আপনি যদি এটি কোনওরূপে সংজ্ঞায়িত করেন তবে আপনি অ্যাপডেলিগেট ব্যবহার করে স্টাইল সেট করতে পারেন

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

7
setStatusBarStyleআইওএস 9.0
জেফ্রি নিও

@ জেফ্রে_নিও যদিও এটি সত্য তবে আমি কাজের প্রতিস্থাপনটি পাব না। ওয়ার্কিং কোড সহ উত্তর হিসাবে আপনার মন্তব্যটি দেখতে দরকারী হবে।
ডুম্বলড

15
override func viewWillAppear(animated: Bool) {
    self.navigationController?.navigationBarHidden =  true

    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
    if statusBar.respondsToSelector("setBackgroundColor:") {
        statusBar.backgroundColor = UIColor.redColor()
    }

}

ব্যবহার করা valueForKey("statusBar")অ্যাপলের নির্দেশিকাগুলির সাথে
সম্মতিযুক্ত

15

সুইফট 3

let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
  statusBar.backgroundColor = UIColor.black
} 

নির্দিষ্ট ভিউ কন্ট্রোলারের জন্য স্ট্যাটাস বারের পটভূমির রঙ সেট করার সমাধান এটি।


3
ইউআইভিউউ সবসময় সুইফটে ব্যাকগ্রাউন্ড কালারে সাড়া দেয়।
সিউর

13

সুইফট 2

আমি আমার ভিউউইল অ্যাপয়ারে নিম্নলিখিতগুলি যুক্ত করে সফলভাবে স্ট্যাটাস বারের পটভূমির চেহারা পরিবর্তন করতে সক্ষম হয়েছি:

let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView

    if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
        statusBar.backgroundColor = .redColor()
    }

10

বাস্তবায়ন preferredStatusBarStyleযেমন উল্লেখ করেছে এবং কল self.setNeedsStatusBarAppearanceUpdate()মধ্যে ViewDidLoadএবং Info.plist সেটে UIViewControllerBasedStatusBarAppearanceকরার YES(এটা YESডিফল্ট অনুসারে)

এটা স্পষ্ট কেন এটা code.One অন্যান্য প্রস্তাবনায় কোড কাজ সঙ্গে যেতে হয় চেক করতে working.I প্রয়োজন নয় নয় viewDidLoad UIApplication.sharedApplication().statusBarStyle = .LightContentএবং ডিফল্ট যখন আপনি অদৃশ্য পেতে দেখতে এই পরিবর্তন viewWillDisappear


উত্তরের প্রথম অংশটি কার্যকর করেছিলাম, আমার পক্ষে কাজ করেছে। যাইহোক, আমি ইউআইভিউকন্ট্রোলারবেসড স্ট্যাটাসবার অ্যাপ্লায়েন্স ইনফো.পিস্টে যোগ করি নি। এটি এখনও কাজ করে।
অক্ষর প্যাটেল

10

দ্রুত 3 জন্য

.plist

View controller-based status bar appearance = NO

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Custom statubar
        UIApplication.shared.isStatusBarHidden = false
        UIApplication.shared.statusBarStyle = .lightContent
        let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
        statusBar.backgroundColor = UIColor.gray

        return true
    }

1
আমি সমস্ত সমাধান চেষ্টা করেছিলাম ... এটি কেবল আমার জন্য কাজ করেছিল !! আমি জানি না কেন: ডি
খালেদ হাইক

ড্রয়ের ভাগ্য
জিয়াং

আইওএস 9.0 এ 'স্ট্যাটাসবারহিডিন'-এর সেটটার অবনতি হয়েছে: ব্যবহার - [ইউআইভিউকন্ট্রোলার পছন্দসত্তা স্ট্যাটাসবারহিডান] ...
..

9

আমার পরিস্থিতিতে আমি আমার ভিউ কন্ট্রোলারদের সংগঠিত করতে স্টোরিবোর্ড ব্যবহার করি I আমি সমস্ত স্ট্যাটাস বারের স্টাইল পরিবর্তন করতে চাই।

আপনি নীচের ছবিতে দেখতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

Starsদেখুন কন্ট্রোলার হ'ল একটি CPBaseNavigationController, এবং CPBaseNavigationControllerএর সাবক্লাস UINavigationController

আমি পরবর্তী সেটগুলি করার চেষ্টা করছি:

  1. ইন AppDelegate.swiftfunc didFinishLaunchingWithOptions, অ্যাড

    //change status bar color
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    কিন্তু কোন প্রভাব।

  2. স্টোরিবোর্ড সালে এটি Base Tab BarController.select (উপরে ছবি) Attributes Inspectorপরিবর্তন Sattus Barকরতে অ্যাট্রিবিউট Light Content.so খারাপ, কোন প্রভাব।

এখানে চিত্র বর্ণনা লিখুন

  1. সর্বশেষে আমি এটি পেয়েছি my আমার কাস্টম ন্যাভিগেশন কন্ট্রোলারে CPBaseNavigationController, ফানক যুক্ত করুনpreferredStatusBarStyle

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
       return .LightContent
    }

    এটা ভাল কাজ করে!

statusBarStyle9.0 এ অবমানিত ছাড়াও, আপনি ব্যবহার করতে পারেন -[UIViewController preferredStatusBarStyle]


9

নেভিগেশন ভিত্তিক অ্যাপ্লিকেশন জন্য কাজ করে

    var addStatusBar = UIView()
    addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
    addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
    self.window?.rootViewController?.view .addSubview(addStatusBar)

এই নির্দিষ্ট কোডটি কোথায় যুক্ত করবেন, কেবল এটি কাজ করতে পারেনি to
অনুজ

আপনি এটিকে ডিডফিনিশলঞ্চিং উইথঅপশনগুলিতে অ্যাপ প্রতিনিধি ফাইলটিতে যুক্ত করতে পারেন
Jio

1
হার্ড কোডড 320 প্রস্থের পরিবর্তে addStatusBar.frame = CGRectMake (0, 0, UIScreen.mainScreen () .sund.width, 20) ব্যবহার করা কি ভাল না?
টর্স্টেন ওজাপর্ব

@ টর্স্টেন ওজাপেরভে সম্পাদিত
Jio

এটি কীভাবে সুইফট ৩.০ দিয়ে করবেন?
ইয়েটি

8

সুইফট ৩.০ এক্সকোড ৮-এ সবকিছুই অনেক সহজ

অ্যাপ ডেলিগেট ফাইলে নীচের কোডটি ব্যবহার করে after

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

এটি প্রবেশ করান:

UINavigationBar.appearance().barStyle = .black

UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)

1
লাল, সবুজ এবং নীল মান 0 থেকে 1 এর মধ্যে রয়েছে You আপনাকে সেগুলি 255 দ্বারা ভাগ করতে হবে বা এটি কাজ করবে না।
মাকালেলে

8

সুইফট 3

//
//  LoginController.swift
//  Swift 3
//
//  Created by The Crab on 17/01/2017.
//  Copyright © 2017 Paxi Labs. All rights reserved.
//

import UIKit

class LoginController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

7

নেভিগেশন ছাড়া নির্দিষ্ট ভিউকন্ট্রোলারের জন্য সুইফট 4 ভিউকন্ট্রোলার এম্বেড থাকা কেবল এটি আপনার ভিউকন্ট্রোলার ফাইলটিতে যুক্ত করুন।

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

আমাদের যদি কোনও নেভিগেশন কন্ট্রোলার এম্বেড থাকে তবে আপনি কী করবেন?
আইসকোমো

7

এই কাজটি করার আরও একটি সহজ উপায় হ'ল ইউআইএনএভিগেশন কন্ট্রোলার শ্রেণীর একটি বর্ধিতাংশ তৈরি করা।

যেহেতু অগ্রাহ্য preferredStatusBarStyle:পদ্ধতি অভ্যস্ত কাজ যদি না আমরা UINavigationController ক্লাসের ভিতরে এটা করতে।

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }

4

আমি App Delegateফাইলের নীচে কোড ব্যবহার করে নির্দিষ্ট রঙ (আরজিবি ফর্ম্যাটে) সেট করেছিলাম :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
. . .

 UIApplication.sharedApplication().statusBarHidden = false
        UIApplication.sharedApplication().statusBarStyle = .LightContent

        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
            statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
        }

. . .
}

আপনাকে Info.plistফাইলের নীচে কী যুক্ত করতে হবে:

বুলিয়ান মানটি কোনও স্থানে সেট করে নিয়ামক-ভিত্তিক স্থিতি দণ্ডের উপস্থিতি দেখুন

স্ক্রিনশট ঘ

স্ক্রিনশট 2


সিউফুট 3.0.০ সহ এটি কীভাবে করবেন?
YETI

4

আমি আপনাকে আরও সহজ উপায়ে বলতে পারি,

  1. অ্যাপল ডকস যেমন বলেছে ঠিক ততক্ষণই ডিডলুডে সেটনিডস স্ট্যাটাসবার অ্যাপ্লায়েন্সআপডেটকে কল করুন

যদি ভিউ কন্ট্রোলারের স্ট্যাটাস বারের বৈশিষ্ট্যগুলি যেমন লুকানো / অদৃশ্য স্থিতি বা শৈলী, পরিবর্তন হয় তবে এই পদ্ধতিটি কল করুন। আপনি যদি অ্যানিমেশন ব্লকের মধ্যে এই পদ্ধতিটি কল করেন, পরিবর্তনগুলি অ্যানিমেশন ব্লকের বাকী অংশগুলির সাথে অ্যানিমেটেড হবে।

  1. পছন্দসই স্ট্যাটাসবারস্টাইল প্রয়োগ করুন আপনার পছন্দসই প্রকারটি ফিরিয়ে দিন।

এটি আইওএস 10.1 এ আমার জন্য কাজ করেছে।

উদ্দেশ্য গ

[self setNeedsStatusBarAppearanceUpdate];

-(UIStatusBarStyle)preferredStatusBarStyle {
     return UIStatusBarStyleLightContent;
}

দ্রুতগতি

setNeedsStatusBarAppearanceUpdate()

var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent
}

আমি অবাক হয়েছি কেউ এটিকে দেখায় না। যাইহোক উপভোগ করুন :)


4

এইটি নিয়ে আমার কিছুটা সমস্যা হয়েছিল। আমি বিশ্বব্যাপী স্ট্যাটাস বারের বর্ণটি পরিবর্তিত হয়ে দেখা এবং তারপরে আবার পরিবর্তন করার বিষয়টি গ্রহণযোগ্য উত্তরের মতো অদৃশ্য হয়ে যাওয়ার বিষয়ে সত্যিই ভাল লাগেনি। বিশ্বাস করুন বা না করুন আপনি preferredStatusBarStyleআপনার পছন্দসই ভিউ নিয়ামককে ওভাররাইড করে এই কাজটি পেতে পারেন । অনেক সময় পরে এটি কাজ করতে আমি এটি করেছি:

  1. আপনার মধ্যে info.plistYES এ নিয়ামক-ভিত্তিক স্থিতি বারের চেহারা দেখুন পরিবর্তন করুন ।
  2. এখন যে কোনও পূর্ণ স্ক্রিন ভিউ নিয়ন্ত্রণকারী ওভাররাইড করে স্ট্যাটাস বারের স্টাইলটি পরিবর্তন করতে পারে preferredStatusBarStyle
  3. আমি পূর্ণ স্ক্রিন উল্লেখ করেছি কারণ এটি (পূর্ণ-পর্দাবিহীন) মডেল ভিউ কন্ট্রোলারের জন্য কাজ করবে না, modal​Presentation​Captures​Status​Bar​Appearanceহ্যাঁ সেট করা ছাড়াই নয় that
  4. এছাড়াও আপনার যদি নেভিগেশন নিয়ন্ত্রকের মতো উদাহরণস্বরূপ ভিউ কন্ট্রোলার এম্বেড থাকে তবে এটি স্থিতি দণ্ড শৈলীর জন্য শীর্ষ সর্বাধিক দেখা নিয়ন্ত্রককে জিজ্ঞাসা করবে। child​View​Controller​For​Status​Bar​Styleএমবেড করা ভিউ কন্ট্রোলারকে ওভাররাইডিং এবং পাসিংয়ের কাজ করার কথা থাকলেও এটি আমার পক্ষে হয়নি। সুতরাং আমি সবেমাত্র ভিউ কন্ট্রোলারদের পছন্দসই স্ট্যাটাস বারের স্টাইল হিসাবে পছন্দসই স্ট্যাটাস বারটি ফিরিয়ে দিয়েছি। এটার মতো কিছু:

    override var preferredStatusBarStyle: UIStatusBarStyle {
         if let topViewController = viewControllers.last {
             return topViewController.preferredStatusBarStyle
         }
    
         return .default
    }

এই উত্তরটি আমাকে সাহায্য করেছে! আমি দেখতে পেয়েছি যে কোনও কারণে আমার নেভিগেশন কন্ট্রোলার (মডেল উপস্থাপিত হচ্ছে) সুস্পষ্টভাবে তার স্থিতি বারের শৈলীর জন্য শীর্ষ- দর্শনীয় নিয়ামককে জিজ্ঞাসা করছে না । সুতরাং আমি ফিরে subclass UINavigationControllerএবং ওভাররাইড child​View​Controller​For​Status​Bar​Styleসেখানে ছিল, ফিরে self.topViewController
তাবার

3

সুইফ্ট 4 বা 4.2 এ

আপনি আপনার উপাচার্যে যোগ করতে পারেন

preferredStatusBarStyle

এবং ফেরতের মান সেট করুন

.lightContent বা .default

উদা:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

3

(10 জুন, 2020 পর্যন্ত)

সুইফট 5 ( ফাইল সম্পাদনা ছাড়াই).Plist )

আপনি ব্যবহার করে থাকেন Storyboard, এখানে যান NavigationControllerনির্বাচন করুন navigationBarএ ক্লিক করুন Attributes Inspector, তারপর পরিবর্তন style। আপনার যদি light content( হোয়াইট স্ট্যাটাস বার ) প্রয়োজন হয় তবে defaultসেট স্টাইল বলতে দিন blackএবং এটি চাইলে dark content ( কালো স্ট্যাটাস বার ) সেট করুনdefault

ডিফল্ট ( UIBarStyleDefault) এর ফলে অন্ধকারের অগ্রভাগের UIStatusBarStyleDefaultস্থিতি দণ্ড in এবং UIBarStyleBlackএকটি UIStatusBarStyleLightContentস্ট্যাটাস বার দেবে।

Programatically

let nav = UINavigationController(rootViewController: rootViewController)

    nav.navigationBar.barStyle = .default //gives you dark Content status bar

    nav.navigationBar.barStyle = .black  //gives you light content status bar

নেভিগেশন বার ছাড়া ( সম্পাদনা করুন).Plist )

আপনার UIViewControllerBasedStatusBarAppearance/ যোগ View controller-based status bar appearanceকরুন info.plist, এবং সেট মান হয় true

OverridepreferredStatusBarStyleআপনার নিয়ামক মধ্যে সম্পত্তি

class ViewController: UIViewController {
    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
}

2

সুইফট 3.0 আপডেট

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.statusBarStyle = .lightContent

        return true
    }

2

আমার সাথে কী কাজ করেছে, স্টোরিবোর্ডে, নেভিগেশন কন্ট্রোলারে যান, নেভিগেশন বারটি নির্বাচন করুন, বৈশিষ্ট্য পরিদর্শককে ক্লিক করুন, তারপরে স্টাইলটি ডিফল্ট থেকে কালোতে পরিবর্তন করুন। এটাই!


2

সুইফট 4.2 আরে, আমি একটি সমাধান ভাগ করে নিতে চেয়েছিলাম, যা আমার জন্য কাজ করেছিল যে গ্রেগ গ্রুমিটের এই বর্ণনামূলক বিষয় নিয়ে আমি একটি দুর্দান্ত নিবন্ধ পেয়েছি।

পদক্ষেপ 1 যেমন অন্যরা আপনার পিআইএলএসটিতে নীচে ADD উল্লেখ করেছেন

View controller-based status bar appearance YES

রুটভিউ নিয়ন্ত্রণকারী মধ্যে দ্বিতীয় পদক্ষেপ নীচে যুক্ত করুন

var statusBarHidden: Bool = false {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }

    var vcStatusBarStyle: UIStatusBarStyle = .default {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return vcStatusbarStyle
    }

যখন পারেন সম্পত্তি আপডেট statusBarHiddenবা vcStatusBarStyleকল করবে setNeedsStatusBarAppearanceUpdate()এবং হয় জন্য নতুন মান স্ট্যাটাস বার আপডেট হবে prefersStatusBarHiddenবা preferredStatusBarStyle। আমার পরিস্থিতিতে আমাকে ধারক ভিউ কন্ট্রোলারের জন্য এই বৈশিষ্ট্যগুলি আপডেট করতে হয়েছিল, এটি দৃশ্যমান চাইল্ডভিউ কনট্রোলারের পিতামাতা। আমি একটি সাধারণ প্রতিনিধি পদ্ধতি ব্যবহার করে এটি করেছি।

protocol MainViewControllerDelegate {
    func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
    func toggleStatusBar(visable: Bool)
}

চাইল্ডভিউ কনট্রোলার (ভিজিবল ভিসি) ইনস্ট্যান্ট করার সময় অবশ্যই অবশ্যই মেইনভিউকন্ট্রোলার (কনটেইনার ভিসি) এর প্রতিনিধি হিসাবে সেট করতে ভুলবেন না। আমি মাঝে মাঝে করি। :)

childViewController.delegate = self

তারপরে চাইল্ডভিউকন্ট্রোলারে স্ট্যাটাস বারটি আপডেট করার প্রয়োজন হলে আমি ডেলিগেট পদ্ধতিটি কল করেছিলাম।

self.delegate?.updateStatusBarStyle(statBarStayle: .default)

উপরে উল্লিখিত হিসাবে গ্রেগ গ্রুমিট এই সমাধান সম্পর্কে আরও বিশদে যায় এবং পাশাপাশি ইউআইএনএভিগেশন কন্ট্রোলারদের সাথেও কাজ করে। এখানে লিঙ্ক করুন: স্ট্যাটাস বারের রহস্যময় মামলা


1

সমর্থনকারী ফাইল গ্রুপে ক্লিক করুন (বাম দিকের উপরে - আপনার প্রকল্পের নাম)। তথ্যে নেভিগেট করুন। নীচে বান্ডিল নামের মত তালিকার মাঝে কোথাও + ক্লিক করুন। এবং "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন" এবং এটি কোনওতে সেট করুন। তারপরে AppDelegate.swift খুলুন এবং এর মতো পরিবর্তন করুন:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

return true
}

এটাই.


আপনি প্রশ্নটি ভুল পড়েছেন। আমি সম্পূর্ণ অ্যাপ্লিকেশনের জন্য নয়, নির্দিষ্ট ভিউকন্ট্রোলারদের জন্য কীভাবে স্ট্যাটাসবার্স স্টাইল পরিবর্তন করবেন সে সম্পর্কে জিজ্ঞাসা করেছি।
অনুজ

আমার উত্তর নীচে @ অানুজ
18

1

এক্সকোড 10 এর জন্য আপনি একটি ক্লাস তৈরি করতে পারেন এবং এটি আপনার ভিউকন্ট্রোলার ক্লাসের আগে রেখে দিতে পারেন, আপনি এই শ্রেণিটিকে সমস্ত দর্শন কন্ট্রোলারে কল করতে পারেন একটি হালকা সামগ্রী স্ট্যাটাস বার প্রয়োজন ...

class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}

এখন আপনার ভিউ কন্ট্রোলার ক্লাসটি এতে পরিবর্তন করুন:

class YourViewController: UIViewControllerWithLightStatusBar {
...
}

এবং যে সব...


1

সুইফট 4-এ নির্দিষ্ট দর্শন নিয়ন্ত্রকের জন্য নেভিগেশনের জন্য কাজ করে

   let app = UIApplication.shared
   let statusBarHeight: CGFloat = app.statusBarFrame.size.height

   let statusbarView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: statusBarHeight))
   statusbarView.backgroundColor = UIColor.red
   view.addSubview(statusbarView)

1

সতর্কতামূলক


আইওএস 9.0-এ 'স্ট্যাটাসবারস্টাইল'-এর সেটার অবনতি হয়েছে: ব্যবহার করুন - [ইউআইভিউকন্ট্রোলার পছন্দসই স্ট্যাটাসবার্ট স্টাইল]

UIApplication.shared.statusBarStyle = .default

সুতরাং আমার সমাধানটি এটির মতো ছিল: নেভিগেশন কন্ট্রোলার থেকে একটি এক্সটেনশন তৈরি করা:

extension UINavigationController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        if let topViewController = presentedViewController{
            return topViewController.preferredStatusBarStyle
        }
        if let topViewController = viewControllers.last {
            return topViewController.preferredStatusBarStyle
        }

        return .default
    }
}

এবং যদি আপনার কাছে এমন একটি ভিউ কনট্রোলার থাকে যা অ্যাপ্লিকেশনটির স্টাইলের চেয়ে অন্য শৈলীতে থাকে তবে আপনি এটি তৈরি করতে পারেন

var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
    return barStyle
}

আপনার অ্যাপের স্ট্যাটাস শৈলী হ'ল .defaultএবং আপনি চান যে এই স্ক্রিনটি .lightContent এমনভাবে হয় বার্স স্টাইল .lightContentতার ডিফল্ট মান হিসাবে গ্রহণ করবে , এটি স্ট্যাটাস বারের স্টাইলকে লাইটকন্টে viewWillDisappearবদলে দেবে এবং তারপরে বার স্টাইলটিকে আবার অ্যাপের স্থিতি বারের স্টাইলে পরিবর্তন করার বিষয়টি নিশ্চিত করুন lets আমাদের ক্ষেত্রে যা .default

এটা আমার জন্য কাজ করে


1

স্ট্যাটাস বারের জন্য কাস্টম রঙ (আইওএস 11 +, সুইফট 4 +)

যদি আপনি কীভাবে নিজের পছন্দসই রঙে স্ট্যাটাস বারটি পরিবর্তন করতে চান তবে এটি কার্যকর সমাধান।

let statusBarView = UIView()
view.addSubview(statusBarView)
statusBarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
    statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
    statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
    statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
statusBarView.backgroundColor = .blue
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.