সুইফট 3-এ স্ট্যাটাস বার স্টাইল কীভাবে সেট করবেন


186

আমি এক্সকোড 8.0 বিটা 4 ব্যবহার করছি।

পূর্ববর্তী সংস্করণে, ইউআইভিউকন্ট্রোলারের স্ট্যাটাস বার শৈলী সেট করার পদ্ধতি রয়েছে

public func preferredStatusBarStyle() -> UIStatusBarStyle

যাইহোক, আমি এটি সুইফট 3-এ একটি "কেবলমাত্র ভেরিয়েবল পান" তে পরিবর্তিত পেয়েছি।

public var preferredStatusBarStyle: UIStatusBarStyle { get } 

আমার ইউআইভিউউকন্ট্রোলারে কীভাবে স্টাইলটি ব্যবহার করতে পারবেন?


স্ট্যাটাসবার্ট স্টাইল: ইউআইএসটিটাসবারস্টাইল = .লাইট কনটেন্ট
আনবু.কার্তিক

উত্তর:


484

[আপডেট করা] এক্সকোড 10+ এবং সুইফট 4.2+ এর জন্য

এটি আইওএস 7 এবং এর চেয়ে বেশি বয়সীদের জন্য পছন্দসই পদ্ধতি

আপনার অ্যাপ্লিকেশন এর মধ্যে Info.plistসেট View controller-based status bar appearanceকরুন YES

আপনার প্রতিটি দেখার নিয়ামককে ওভাররাইড preferredStatusBarStyle ( অ্যাপল ডক্স ) করুন। উদাহরণ স্বরূপ:

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

আপনি যদি preferredStatusBarStyleনিজের ভিউ কন্ট্রোলারের অভ্যন্তরে পরিবর্তিত কোনও কিছুর উপর ভিত্তি করে কোনও ভিন্ন পছন্দসই স্ট্যাটাস বার স্টাইলটি ফিরে আসেন (উদাহরণস্বরূপ, স্ক্রোলের অবস্থান কিনা বা প্রদর্শিত চিত্র অন্ধকার কিনা), তবে setNeedsStatusBarAppearanceUpdate()সেই অবস্থার পরিবর্তন হলে আপনি কল করতে চাইবেন ।

আইওএস সংস্করণ 7 এর পূর্বে, অবচিত পদ্ধতি

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

আপনার অ্যাপ্লিকেশনটি যদি আপনার অ্যাপ্লিকেশনটিকে সমর্থন করে তবে Info.plistসেট View controller-based status bar appearanceকরুন NO

ইন appDelegate.swift, didFinishLaunchingWithOptionsফাংশন, যোগ করুন:

UIApplication.shared.statusBarStyle = .lightContent

নেভিগেশন কন্ট্রোলারের জন্য

আপনি যদি কোনও নেভিগেশন নিয়ন্ত্রণকারী ব্যবহার করেন এবং আপনি প্রতিটি ভিউ নিয়ন্ত্রকের পছন্দসই স্ট্যাটাস বার শৈলীটি ব্যবহার View controller-based status bar appearanceকরতে চান YESএবং আপনার অ্যাপ্লিকেশনটিতে সেট করতে চানinfo.plist

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

3
আমার জন্য কাজ কর. প্রথমে তথ্য.পিস্টে নতুন সেটিংটি inোকাতে ভুলে গেছেন।
ফ্যালসক্রিপ্ট

1
@ লাইটম্যান ইউআইএপ্লিকেশন পরিস্থিতি বারস্টাইলকে অবহেলা করা হয়নি, আমি এটি আইওএস 11 এ ব্যবহার করেছি এবং এটি কার্যকর হয়।
সুশোভিত

1
এই উত্তরটিতে ব্যবহৃত হিসাবে @ সুশোভিত সেট স্ট্যাটাস বারস্টাইলকে আইওএস 9 এ অবহেলা করা হয়েছিল। তবে আপনার কাছে এখনও পঠনযোগ্য সম্পত্তি হিসাবে ইউআইএপ্লিকেশন.স্ট্যাটাসবারস্টাইল রয়েছে।
লাইটম্যান

1
এমন অনেক সময় আছে যখন আপনি প্রতিটি দর্শনের রঙের কারণে প্রোগ্রামভিত্তিক সেট করতে সক্ষম হতে চান।
আলেজান্দ্রো কাভাজোস

9
আপনি অ্যাপডেলিগেট.সভিউটে লাইনটি সরাতে এবং লক্ষ্য -> সাধারণ -> স্থাপনার তথ্য -> স্থিতি দণ্ডের স্টাইল -> হালকা
রবার্ট ভারিংদা

162

সর্বশেষ আপডেট (এক্সকোড 10+ / সুইফ্ট 4.2+)

বিগত বেশ কয়েক বছর ধরে উপস্থিত বিভিন্ন পদ্ধতির পিছনে যুক্তি বুঝতে আগ্রহী যে কেউ এই নিবন্ধটি অক্ষত রয়েছে। এদিকে, এক্সকোড 10 হিসাবে , সুইফ্ট 4.2 প্রথম পদ্ধতির অবমূল্যায়ন করা হয়েছে এবং এটি আর সমর্থিত নয় (যেমন আপনি এটি নিযুক্ত করার চেষ্টা করলে কার্যকর হবে না )। Plist.infoপতাকার পিছনে যুক্তি এবং কাস্টমাইজিং অনুশীলনটি আরও ভালভাবে বোঝার জন্য এটি এখনও আপনার তথ্যের জন্য উল্লেখ করা হয়েছে ।

গুরুত্বপূর্ণ ব্যাখ্যা

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

প্রথম পদ্ধতির - পুরো অ্যাপ্লিকেশনের জন্য একটি রঙ (আইওএস 7 সাল থেকে প্রস্রাবিত)

ইনফিটলিস্টে আপনি একটি কী খুঁজে পান বা তৈরি করেন create

View controller-based status bar appearance

এবং এটি কোন সেট করুন ।

এর মানে কি? এটি মূলত একটি সেটিংস স্থাপন করে যা বলে যে আপনার অ্যাপ্লিকেশনটিতে, স্ট্যাটাস বারের উপস্থিতি প্রতিটি দর্শন নিয়ামক দ্বারা পৃথকভাবে সংজ্ঞায়িত করা হয় না । এটি বুঝতে অত্যন্ত গুরুত্বপূর্ণ। এর অর্থ হল যে সমস্ত স্ক্রিনের জন্য আপনার কাছে পুরো অ্যাপ্লিকেশনের জন্য অভিন্ন সেটিংস রয়েছে। দুটি সেটিংস রয়েছে: defaultযা সাদা ব্যাকগ্রাউন্ডে কালো লেখা বা lightContentকালো পটভূমিতে সাদা পাঠ্য।

এর মধ্যে একটি সেট আপ করতে ( সমস্ত পর্দার জন্য একটি সেটিংস ):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent // .default
    return true
}

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

দ্বিতীয় পদ্ধতির - প্রতিটি দেখার নিয়ামকের জন্য পৃথক রঙ

এটি বিপরীত। এটিকে কাজ করতে, তথ্য.প্লেস্টে এগিয়ে যান এবং সেট করুন

View controller-based status bar appearance

থেকে হ্যাঁ

এই উপায়ে, যখনই কোনও নতুন ভিউ কন্ট্রোলার খোলা থাকে, আপনি যদি প্রতিটি UIViewControllerক্ষেত্রে এই প্রয়োগটি সন্নিবেশ করেন তবে স্ট্যাটাস বার স্টাইলটি পৃথকভাবে সেট করা থাকে :

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

আপনার মতো প্রথমটি রয়েছে, স্ট্যাটাসবারের জন্য গা dark় বা হালকা স্টাইল সেট করুন, প্রতিটি ভিউ কন্ট্রোলারের জন্য পৃথক।

এই সম্পত্তিটি দুটি পরিস্থিতিতে ইউআইকিট দ্বারা আনা হয়েছে:

  1. স্ক্রিনটি শুরু করার পরে, যখন ইউআই প্রস্তুত করা হচ্ছে।
  2. setNeedsStatusBarAppearanceUpdate()কোডে কল করার পরে ।

পরবর্তী ক্ষেত্রে, আপনি নিম্নলিখিত কোড দ্বারা স্থিতি দণ্ডের উপস্থিতিগুলি হেরফের করার যোগ্য:

var isDark = false {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return isDark ? .lightContent : .default
}

func toggleAppearance() {
   isDark.toggle()
}

তারপরে, আপনি যখনই কল করবেন তখন toggleAppearance()স্ট্যাটাসবারের স্টাইল পরিবর্তনটি ট্রিগার করা হবে।

তৃতীয় পদ্ধতির - হ্যাক!

একটি হ্যাক রয়েছে যা সরাসরি স্ট্যাটাসবারে অ্যাক্সেস করতে দেয়:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.backgroundColor = UIColor.blue
    }
    
    return true
}

কেন হ্যাক? আপনার যদি কালো বা সাদা বাদে স্ট্যাটাস বারের রঙের প্রয়োজন হয় তবে আপনি নথিভুক্ত API ব্যবহার করুন। আপনি statusBarকেভিসি ব্যবহার করে অবজেক্ট পাবেন এবং এর পটভূমি রঙ সেট করুন। আপনি যেভাবে UIStatusBarঅবজেক্টটি পান সেটি হ'ল যা উত্স থেকে উত্পন্ন UIViewএবং এইভাবে প্রাকৃতিকভাবে সহায়তা করে backgroundColor। এটি নোংরা, আইনী উপায় নয়, তবে এখনও অবধি স্ট্যাটাসবারের জন্য কাস্টম রঙ সেটআপ করার একমাত্র উপায় (অ্যাকাউন্টের UINavigationBarপদ্ধতিকে গ্রহণ না করা , যা নাবার, স্ট্যাটাসবারের চেহারা সম্পূর্ণরূপে কাস্টমাইজ করতে দেয়)। এটি আপনার অ্যাপ্লিকেশনটিকে ভালভাবে প্রত্যাখ্যান করার দিকে পরিচালিত করতে পারে। তবে আপনি ভাগ্যবান। এবং যদি আপনি কিছু জটিল পরিস্থিতিতে থাকেন (যেমন নেস্টেড, শিশু নেভিগেশন এবং দর্শনীয় নিয়ন্ত্রকদের শ্রেণিবিন্যাস) তবে এটি স্ট্যাটাসবারের চেহারাটি কাস্টমাইজ করার জন্য কমপক্ষে কম ঝামেলাজনক উপায় হতে পারে (উদাহরণস্বরূপ, এটিকে স্বচ্ছ করতে)

এক্সকোড 10+, সুইফট 4.2

বিকল্পগুলির আর কোনও বিকল্প নেই: বিকাশকারীকে প্রতিটি দর্শকের স্ট্যাটাসবারের উপস্থিতি সংজ্ঞায়িত করতে হবে, পতাকাটি হ্যাঁ সেট করে (বা এই ক্রিয়াটি বাদ দেওয়া উচিত, কারণ এটি হ্যাঁ ডিফল্টরূপে হ্যাঁ) এবং উপরের নির্দেশাবলী অনুসরণ করে।


বোনাস

যে কোনও পর্যায়ে স্বেচ্ছায় স্ট্যাটাসবারের উপস্থিতি পরিবর্তন করতে জটিল পরিস্থিতিতে আপনি হ্যাক-ভিত্তিক সমাধানটি (যদিও উত্সাহিত নয়) ব্যবহার করতে পারেন। রঙ-ভিত্তিক, নিম্নলিখিত এক্সটেনশন পদ্ধতিটি নিয়মিত পদ্ধতির সাহায্যে আপনি যা করতে পারতেন ঠিক তা করে। আপনি এটি আপনার প্রয়োজনের সাথে সামঞ্জস্য করতে পারেন।

extension UIViewController {
    func setStatusBarStyle(_ style: UIStatusBarStyle) {
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
            statusBar.backgroundColor = style == .lightContent ? UIColor.black : .white
            statusBar.setValue(style == .lightContent ? UIColor.white : .black, forKey: "foregroundColor")
        }
    }
}

2
একবার আপনার স্ট্যাটাস বারটি পরে, আপনি এটিও করতে পারেন: স্ট্যাটাস বার.সেটওয়ালু (ইউআইকিওলোর.রেড, ফোরকি: "ফোরগ্রাউন্ড কালার"); বা কোন সম্পত্তি যে UIStatusBar কিন্তু UIView না পাওয়া যায় সেট করার কোনো বিদ্যমান কী ব্যবহার
মার্ক

অ্যাপ্লিকেশন.স্ট্যাটাসবারস্টাইল = .লাইট কনটেন্টটি সাধারণত এই আইওএস 9 এর থেকে হয়> আইটিএস 9.0-এ 'স্ট্যাটাসবার্স স্টাইল'-এর সেটটার অবমূল্যায়ন করা হয়েছিল: ব্যবহার করুন - [
ইউআইভিউকন্ট্রোলার স্ট্যাটিসবার্সটাইলে

অ্যাপ্লিকেশনটির রঙ থিম পরিবর্তন করার সময় এটি কেবল এখানে কাজ করে। তবে মনে হয়, একবার এটি সেট হয়ে গেলে, ভিউ কন্ট্রোলারগুলি স্যুইচ করার সময় আপনাকে সর্বদা এটি পুনরায় সেট করতে হবে। পছন্দের স্ট্যাটাসবার্ট স্টাইল () পদ্ধতিটি এখান থেকে উপেক্ষা করা হয় (এমনকি তথ্য.প্লেস্টে সঠিক সেটিং সহ)।
নোটোমেটিক

2
অন্যদের তুলনায় এই উত্তরটি আরও বর্ণনামূলক।
বিরুম্যাক্স

2
বোনাস সমাধান আইওএস 13.1 এ ভাঙা হয়েছে
ভাইরুম্যাক্স

130

ফিরিয়ে দেওয়া মানটি সেট করার চেয়ে আপনি ওভাররাইড করার চেষ্টা করতে পারেন। পদ্ধতিটি {get} হিসাবে ঘোষিত হয়েছে, সুতরাং কেবল একটি গিটার সরবরাহ করুন:

 override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

আপনি যদি এটি শর্তসাপেক্ষে সেট করেন, আপনাকে কল করতে হবে setNeedsStatusBarAppearanceUpdate()যাতে আপনার প্রস্তুত হওয়ার সাথে সাথে পরিবর্তনটি প্রাণবন্ত হয়ে উঠতে পারে


2
আপনি prefersStatusBarHiddenকিছু মতামতের জন্য চয়ন করতে পারেন এটি এটি একটি আরও ভাল পদ্ধতির । আপনি যদি সাথে যাচ্ছেন তবে আপনি UIApplication.shared.statusBarStyleএটির সাথে আটকে যাবেন।
superarts.org

105

সুইফট 3 এবং 4, আইওএস 10 এবং 11, এক্সকোড 9 এবং 10
আমার জন্য, এই পদ্ধতিটি কার্যকর হয় না:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

যখন আমি প্রতিটি দৃশ্যের নিয়ামককে অভ্যস্ত করতাম তবে এটি কার্যকর:

  • ফাইল ইনফো.লিস্টে সারি যুক্ত করুন: View controller-based status bar appearanceএবং এতে সেট করুনNO

  • প্রশংসাপত্রের পরবর্তী:

    UIApplication.shared.statusBarStyle = .lightContent

আমি কেবল অ্যাপের প্রতিনিধিতে কোড যুক্ত করার পরে চেষ্টা করছিলাম, তবে তথ্য প্লাস্টিক সেটিংটি আমার পক্ষে সহায়ক ছিল। আপনাকে ধন্যবাদ
অখিলেশ শর্মা

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

33

যদি আপনি statusBarক এর মধ্যে থাকা সমস্ত দর্শনগুলির জন্য সাদা রং পরিবর্তন করতে চান UINavigationControllerতবে এটি ভিতরে যুক্ত করুন AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

এই কোড:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

না কাজ UIViewControllersএকটি অন্তর্ভুক্ত UINavigationControllerকরার জন্য, কারণ কম্পাইলার সৌন্দর্য statusBarStyleএর UINavigationController, না জন্য statusBarStyleএর ViewControllersএটি দ্বারা রয়েছে।

আশা করি এটি তাদের গ্রহণযোগ্য উত্তরের সাথে সফল হয়নি!


হ্যাঁ আপনাকে অনেক ধন্যবাদ! নেভিগেশন কন্ট্রোলারটি একটু উপদ্রব ছিল যা অনেকে বিবেচনা করেনি!
অ্যালেক্সিস ক্যান্ডেলারিয়া

26

ভিউটি প্রকাশের পরে আপনি যদি কোনও সময় স্ট্যাটাস বারের স্টাইল পরিবর্তন করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

  • ফাইল ইনফো.লিস্টে সারি যুক্ত করুন: কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন এবং এটি হ্যাঁ সেট করুন

    var viewIsDark = Bool()
    
    func makeViewDark() {
    
        viewIsDark = true
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func makeViewLight() {
    
        viewIsDark = false
        setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
    
        if viewIsDark {
            return .lightContent 
        } else {
            return .default 
        } 
    }

1
এবংIf you call this method within an animation block, the changes are animated along with the rest of the animation block.
আলেকজান্ডার জি

25

আপনার তথ্য.প্লেস্ট ফাইলে আপনাকে নীচের কীটি যুক্ত করতে হবে:

View controller-based status bar appearance বুলিয়ান মান সেট করে NO

আপনার প্রশংসাপত্র ক্লাসে, didFinishLaunchingWithOptionsপদ্ধতিতে ফিরে আসার আগে।

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

পরিবর্তন backgroundColorএবং statusBarStyleপ্রয়োজন অনুসারে


দুর্দান্ত সমাধান, তবে এই ব্যক্তিগত গণনাটি কী কোনও এপিআই ব্যবহার করে?
গোল্ডেনজয়ে

ভাল কাজ করুন তবে আমি কীভাবে আমার কাস্টম রঙে পরিবর্তন করতে পারি?
iSrinivasan27

@ মোহনস্রিনিবাসাসন "ইউআইসিওলর.রেড" এর পরিবর্তে আপনি নিজের পছন্দসই রঙ নির্দিষ্ট করতে পারেন।
হিমাংশু পাদিয়া

25

এক্সকোড 10 বা তারপরে

সুইফ্ট 5 এ পরীক্ষা করা হয়েছে

কোনও কোডের দরকার নেই কেবল নীচের পদক্ষেপগুলি অনুসরণ করুন।

আপনি যদি পুরো অ্যাপটিতে স্ট্যাটাস বারটি পরিবর্তন করতে চান।

  1. প্রকল্প নেভিগেটর থেকে প্রকল্প নির্বাচন করুন (বাম দিকের প্যানেল)।
  2. লক্ষ্য নির্বাচন করুন।
  3. সাধারণ ট্যাব নির্বাচন করুন।
  4. স্থাপনার তথ্য সন্ধান করুন।
  5. পরিবর্তন করুন স্ট্যাটাস বার শৈলী হাল্কা (অন্ধকার পটভূমির জন্য "আলো" , হালকা পটভূমি "ডিফল্ট" )

তথ্য.পলিট পরিবর্তনগুলি ভুলে যাবেন না

  1. তথ্য ট্যাব নির্বাচন করুন
  2. আপনার প্লাস্ট ফাইলটিতে এই কীটি যুক্ত করুন "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন" = কোন

আপনার প্রকল্পটি চালান এবং এটি পরীক্ষা করুন।

আমার প্রকল্পটি সুইফ্ট 5 এবং এক্সকোড 10.2 এবং 11.0 এ রয়েছে


এক্সকোড 10 / সুইফট 5 এর জন্য এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি কাজ করার জন্য আপনাকে অবশ্যই দুটি পদক্ষেপগুলি করতে হবে।
জন রবি

পারফেক্ট। ধন্যবাদ! আমি সম্মত হই যে এটি আসল গ্রহণযোগ্য উত্তর হওয়া উচিত।
অন্ধকূপক্ষেত্র

এটি নিখুঁত উত্তর 🤟🏻
নিখিলগোহিল 11

এটি পুরোপুরি এক্সকোড 11-এও দ্রুত কাজ করে সুইফট 5 সহ, ধন্যবাদ
লুইস সান্তিয়াগো

13

আপনি স্টোরিবোর্ডে এটিও করতে পারেন

  1. তথ্য.পলিতে একটি নতুন এন্ট্রি তৈরি করুন "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের চেহারা দেখুন" এটিকে "হ্যাঁ" এ সেট করুন।
  2. আপনার স্টোরিবোর্ডে যান এবং তারপরে আপনি পরিবর্তন করতে চান এমন নেভিগেশন নিয়ন্ত্রকটি নির্বাচন করুন। স্টোরিবোর্ড ডকুমেন্ট আউটলাইন বিভাগ (স্টোরিবোর্ডের বাম প্যানেল) থেকে নেভিগেশন বারে ক্লিক করুন
  3. ডান প্যানেলে যান এবং বৈশিষ্ট্য বিভাগে ক্লিক করুন
  4. নেভিগেশন বার বিভাগের অধীনে আপনি শৈলী দেখতে পাবেন। আপনার পছন্দ মতো শৈলীটি নির্বাচন করুন (ডিফল্ট কালো এবং সাদা সাদা জন্য)

আপনার কাছে থাকা প্রতিটি নেভিগেশন নিয়ন্ত্রকের জন্য আপনাকে এটি করতে হবে। তবে, নেভিগেশন নিয়ামকের অধীনে যে কোনও মতামত আপনার ভিউর স্থিতি বারের স্টাইল / রঙকে সবেমাত্র বেছে নিয়েছে। আমি এই বিকল্পটি আরও ভাল খুঁজে পেয়েছি কারণ আপনি তত্ক্ষণাত্ আপনার ফলাফলগুলি দেখতে পাচ্ছেন এবং প্রতিটি ভিউ নিয়ামকটিতে কোডের অতিরিক্ত লাইন যুক্ত করতে হবে না।

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

(সমস্ত সুইফট প্রকল্পে এক্সকোড 8.3.3 দিয়ে শেষ হয়েছে)


"কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন" "NO"
উইলজয়

2
ভিউ কন্ট্রোলার সামগ্রী অনুসারে স্ট্যাটাস বার স্টাইলটি সেট করার খুব পরিষ্কার উপায়, যা View controller-based status bar appearance = NOপুরো অ্যাপ্লিকেশনটিতে কেবল হালকা বা গা dark় স্টাইল ব্যবহার করার পরিবর্তে সঠিক উপায় । এটি একটি লজ্জার বিষয় যে এই "কোডলেস" উপায়টি কেবল নেভিগেশন কন্ট্রোলারে কাজ করে, অ্যাপলকে কোনও ভিউ কন্ট্রোলারের উদাহরণের মধ্যে এই বিকল্পটি সেট করার জন্য অন্য ক্ষেত্র যুক্ত করার কথা বিবেচনা করা উচিত।
aldoram5

12

সমস্ত ভিউ কন্ট্রোলারদের জন্য স্থিতি দণ্ড পরিবর্তন করতে চাইছেন লোকেদের জন্য: আইওএস 11, সুইট 4/5 সমাধানটি বেশ সহজ।

1) তথ্য.পল্লিস্ট যুক্ত করুন:

নিয়ামক-ভিত্তিক স্থিতি দণ্ডের উপস্থিতি দেখুন -> না

2) এক্সকোড সিলেক্ট প্রকল্পের বাম দিক> লক্ষ্যগুলি > আপনার প্রকল্পটি নির্বাচন করুন> সাধারণ অধীনে> স্থাপনার তথ্য> স্থিতি বারের ধরন নির্বাচন করুন: হালকা

আপনি যদি কেবলমাত্র স্ট্যাটাস বারটি পরিবর্তন করতে চান একজন ভিউকন্ট্রোলারের তবে ভিউডিডলড এ যুক্ত করুন:

২.১ ) তথ্য.পল্লিস্ট

নিয়ামক-ভিত্তিক স্থিতি দণ্ডের উপস্থিতি দেখুন -> হ্যাঁ

2.2 )

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

উদ্দেশ্য প্রতিনিধি-সি (বা দেশীয় প্রতিক্রিয়া) অ্যাপ্লিকেশন প্রতিনিধি থেকে পরিবর্তন:

1) তথ্য.পল্লিস্ট যুক্ত করুন:

নিয়ামক-ভিত্তিক স্থিতি দণ্ডের উপস্থিতি দেখুন -> না

2) AppDelegate -> didFinishLaunchingWithOptions

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDarkContent animated:YES];

স্ট্যাটাস বার পরিবর্তন করা হচ্ছে না কাজ না , শুধুমাত্র modally viewcontrollers উপস্থাপনার কাজে ধাক্কা (গৌণ কন্ট্রোলার) করার চেষ্টা।


8

: প্রথম ধাপে আপনি কী দিয়ে একটি সারিতে যোগ করার প্রয়োজন View controller-based status bar appearanceএবং মান NOথেকে Info.plistফাইল। এর পরে, আপনার নিয়ামকটিতে কেবলমাত্র নিয়ামকটি প্রভাব ফেলবে তার সাথে 2 টি ফাংশন যুক্ত করুন:

override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       UIApplication.shared.statusBarStyle = .lightContent
}

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

6

সুইফট 3

ইনফো.লিস্টে "দেখুন নিয়ামক-ভিত্তিক স্ট্যাটাস বার উপস্থিতি" নামক একটি সারি যুক্ত করুন এবং এর মান সেট করুন No

class YourViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarStyle = .lightContent //or .default
        setNeedsStatusBarAppearanceUpdate()

    }

}

6

নেভিগেশন বারগুলির সাথে ডিল করার সময় স্ট্যাটাস বারের পাঠ্যের রঙ সম্পর্কে একটি ছোট সমস্যা রয়েছে বলে মনে হচ্ছে।

আপনি যদি .plist এন্ট্রি চান তবে কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি সেট করুন YES , আপনার রঙিন নাভি বার থাকলে কখনও কখনও এটি কাজ করবে না।

উদাহরণ স্বরূপ:

override func viewWillAppear(_ animated: Bool) {
    let nav = self.navigationController?.navigationBar
    nav?.barTintColor = .red
    nav?.tintColor = .white
    nav?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    setNeedsStatusBarAppearanceUpdate()
}

এবং

override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}

উপরের কোডটি এ্যাপডেলিগেটে নিম্নলিখিতটি সেট করে থাকলেও কাজ করবে না:

UIApplication.shared.statusBarStyle = .lightContent

এখনও যারা লড়াই করছেন তাদের পক্ষে স্পষ্টতই বিচারকরা যদি স্ট্যাটাস বারটি এনএভি বারের শৈলীর দ্বারা হালকা বা গা dark় হওয়া দরকার। সুতরাং, আমি ভিউউইল অ্যাপয়ারে নিম্নলিখিত লাইনটি যুক্ত করে এটি ঠিক করতে পেরেছি:

nav?.barStyle = UIBarStyle.black

যখন বার শৈলী কালো হয়, তখন এটি আপনার ওভাররাইড করা চলকটি শোনে। আশা করি এটি কাউকে সাহায্য করবে :)


5

এক্সকোড 8.3.1, সুইফট 3.1

  1. তথ্য.পলিতে একটি নতুন এন্ট্রি তৈরি করুন "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের চেহারা দেখুন" এটিকে "না" এ সেট করুন।

  2. AppDelegate.swift খুলুন এবং "didFinishLaunchingWithOptions" পদ্ধতিতে এই লাইনগুলি যুক্ত করুন:

application.statusBarStyle = .লাইট কনটেন্ট


5

স্থিতি দণ্ডের শৈলীর পরিবর্তন সম্পর্কে অ্যাপল নির্দেশিকা / নির্দেশিকাটি এখানে ।

আপনি যদি স্থিতি দণ্ড শৈলী, অ্যাপ্লিকেশন স্তর সেট UIViewControllerBasedStatusBarAppearanceকরতে NOচান তবে আপনার .plistফাইলে সেট করুন। এবং আপনার appdelegate> নীচে didFinishLaunchingWithOptionsযুক্ত যুক্ত করুন (প্রোগ্রামের মাধ্যমে আপনি এটি অ্যাপের প্রতিনিধি থেকে করতে পারেন)।

উদ্দেশ্য গ

[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

দ্রুতগতি

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

আপনি যদি স্থিতি দণ্ড শৈলীটি সেট করতে চান, তবে নিয়ন্ত্রক স্তরে ভিউ করুন তবে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. সেট UIViewControllerBasedStatusBarAppearanceথেকে YES.plist, ফাইল আপনি শুধুমাত্র UIViewController পর্যায়ে সেট স্ট্যাটাস বার শৈলী করতে হবে।
  2. ভিউডিডলড এড ফাংশন - setNeedsStatusBarAppearanceUpdate

  3. আপনার ভিউ কন্ট্রোলারে পছন্দসই স্ট্যাটাসবারস্টাইলকে ওভাররাইড করুন।

উদ্দেশ্য গ

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

দ্রুতগতি

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

স্ট্যাটাস বার শৈলীর সেটআপ স্তর অনুসারে .plist এর মান সেট করুন।

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


5

@ ক্রুনাল https://stackoverflow.com/a/49552326/4697535 দ্বারা দুর্দান্ত asnwer এ যুক্ত করতে

আপনি যদি একটি ব্যবহার করছেন UINavigationControllerতবে এর preferredStatusBarStyleপ্রভাব এর উপর প্রভাব ফেলবে না UIViewController

এক্সকোড 10 এবং সুইফট 4।

একটি কাস্টম সেট করুন UINavigationController

উদাহরণ:

class LightNavigationController: UINavigationController {

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

অ্যাপ্লিকেশন স্তরের সমাধানের জন্য একটি এক্সটেনশন ব্যবহার করুন:

extension UINavigationController {

  open override var preferredStatusBarStyle: UIStatusBarStyle {
      guard let index = tabBarController?.selectedIndex else { return .default }
      switch index {
      case 0, 1, 2: return .lightContent // set lightContent for tabs 0-2
      default: return .default // set dark for tab 3
      }
  }
}

4

সুইফট ৪.০ অনুগ্রহ করে এই কোডটি "diddFinishLaunchingWithOptions LaunchOptions:" এ প্রয়োগ করুন

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

4

সুইফট 4+

সাদা স্ট্যাটাসবার পাঠ্যের জন্য:

navigationController.navigationBar.barStyle = .blackTranslucent

4

আইওএস 11.2

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .black

    return true
}

'ব্ল্যাকঅপাক' অনুপলব্ধ: ইউআইএসটিটাসবারস্টাইললাইট কনটেন্ট ব্যবহার করুন
মাকালেলে

3

এটি আমার পক্ষে কাজ করেছে

প্লাস্টে NO তে View controller-based status barউপস্থিতি সেট করুন তারপরে নিচের লাইনটি যুক্ত করুনUIViewController viewDidAppear

UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)

সেট স্ট্যাটাসবারস্টাইল আইওএস ৯
নষ্ট হয়েছে

3

দ্রুত 3

যদি কন্ট্রোলার-ভিত্তিক স্থিতি দণ্ডের উপস্থিতি দেখুন = ইনফো.পুলিস্টে ইয়েস

তারপরে সমস্ত নেভিগেশনকন্ট্রোলারের জন্য এই এক্সটেনশনটি ব্যবহার করুন

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

যদি কোনও ইউআইএনএভিগেশন কন্ট্রোলার না থাকে এবং কেবল ইউআইভিউকন্ট্রোলার থাকে তবে নীচের কোডটি ব্যবহার করুন:

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

2
আমার জন্য কাজ করে না। আমি ত্রুটিগুলি পেয়েছি "সম্পত্তি তার সুপারক্লাস থেকে কোনও সম্পত্তিকে ওভাররাইড করে না" এবং "উদ্দেশ্যযুক্ত-সি নির্বাচকের সাথে 'পছন্দের স্ট্যাটাসবার্ট স্টাইল' এর সাথে গেটার একই উদ্দেশ্য-সি নির্বাচকের সাথে পূর্ববর্তী ঘোষণার সাথে বিরোধ আছে"।
থিও

এর জন্য ধন্যবাদ, 20 টি বিভিন্ন চেষ্টা এবং আইটেমগুলির কয়েকটি সংমিশ্রণের পরে এটি চেষ্টা করে স্ট্যাটাস বারের রঙ সেট করার উপায়। যখনই আমি একটি নাইট মোডে যোগ করছিলাম এবং কালো রঙের কালো রঙের কাজ করছিল না তখন রঙটি পরিবর্তন করতে চাইলে আমাকে স্রেফ নিউডস্ট্যাটাসবার্প অ্যাপিয়ারেন্সআপটেট () কল করতে হবে।
স্টুয়ার্ট পি।

3

সুইফট 5

Https://stackoverflow.com/a/40066798/2082851PRAVEEN এর উত্তরের জন্য আরও বিশদ যুক্ত করতে আমি আমার বাস্তবায়ন সরবরাহ করতে চাই। এটি প্রতিটি নিয়ামকের স্ট্যাটাস বারটি কাস্টমাইজ করার নমনীয়তা সমর্থন করে

সামগ্রিকভাবে, আমরা এমন একটি তৈরি করব BaseViewControllerযা statusBarStyleসমস্ত ক্ষেত্রে সম্পত্তি পরিচালনা করে । আপনি যখন একটি নতুন নিয়ামক তৈরি করেন, তখন এই বেস নিয়ামকের সাবক্লাস হিসাবে তৈরি করুন।

আপনি যখনই স্থিতির উপস্থিতি পরিবর্তন করতে চান, আপনার কেবল এই সম্পত্তিটি আপডেট করতে হবে। স্থিতি দণ্ড শৈলী অবিলম্বে আপডেট করা হবে।

বাস্তবায়ন

class BaseViewController: UIViewController {

    var statusBarStyle: UIStatusBarStyle = .default {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return statusBarStyle
    }
}

ডেমো

class ViewController: BaseViewController, UIScrollViewDelegate {

    let scrollView = UIScrollView()
    ... 
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        UIView.animate(withDuration: 0.3) {
            if scrollView.contentOffset.y > 30 {
                self.statusBarStyle = .darkContent
            } else {
                self.statusBarStyle = .lightContent
            }
        }
    }
}

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

2। UINavigationController

কারণ UINavigationControllerএটি একটি বিশেষ ক্ষেত্রে, যা আপনি উভয় সমাধান অনুসরণ করতে পারেন:

সমাধান এ: বার্তা প্রেরণের সাথে ওভাররাইড করুন

যেহেতু ইউআইএনএভিগেশন কন্ট্রোলার হ'ল NSObjectএবং এর উত্তরাধিকারী তাই ObjectiveCএর পদ্ধতিগুলি message dispatchএবং আপনি সেগুলি ওভাররাইড করতে পারেন।

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

সমাধান বি: UINavigationControllerসাবক্লাস তৈরি করুন

আপনার যদি ইতিমধ্যে একটি কাস্টম থাকে UINavigationController(যার জন্য সাধারণত আরও প্রয়োজনীয়তা নিয়ন্ত্রণ করা প্রয়োজন), এটি আপনার জন্য সেরা সমাধান।

final class NavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return topViewController?.preferredStatusBarStyle ?? super.preferredStatusBarStyle
    }
}

2

আপনার স্ট্যাটাস বারের রঙ টগল করতে আপনি "shouldStatusBarDark" নামে একটি বুল সম্পত্তি ব্যবহার করতে পারেন। আপনি যখন স্ক্রোলিং করছেন তখন স্থিতি বারের রঙ পরিবর্তন করতে আপনি এর মানও আপডেট করতে পারেন।

 var shouldStatusBarDark = false {
     didSet {
         setNeedsStatusBarAppearanceUpdate()
     }
 }

 override var preferredStatusBarStyle: UIStatusBarStyle {
     return shouldStatusBarDark ? .default : .lightContent
 }

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
     let offSetY = scrollView.contentOffset.y
     if offSetY > 50 {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 1
             self.shouldStatusBarDark = true
         })
     } else {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 0
             self.shouldStatusBarDark = false
         })
     }
 }

নাভিভিউ সম্পত্তি কী? আপনার সমাধান ভাগ করে নেওয়ার জন্য ধন্যবাদ
মেডস্কিল

1
@ মিডস্কিল নাভিভিউ প্রোগ্রামযুক্তভাবে একটি মিমিক নেভিগেশন বার যুক্ত করা হয়েছে।
tiantong

2

এই উত্তরগুলির বেশিরভাগই একই জিনিস পুনরায় হ্যাশ করা হয়, তবে অন্ধকার ব্যাকগ্রাউন্ড ব্যবহার করার সময় এগুলির কোনওটিই আসলে আমার জন্য লঞ্চ স্ক্রিনটিকে সম্বোধন করে না।

আমি নিম্নলিখিতটিতে এটি পেয়েছিলাম info.plistযা একটি হালকা স্টাইলযুক্ত স্ট্যাটাস বার তৈরি করে।

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

2

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

//To set the status bar to white
self.navigationController?.navigationBar.barStyle = .black //or .blackTranslucent

//To set the status bar to black
self.navigationController?.navigationBar.barStyle = .default

এটি আপনার নাবারকে পরিবর্তন করবে না এটি খাঁটি শৈলীর নির্দেশ করে এবং সেইজন্য স্থিতি দণ্ডটি সেই অনুযায়ী পরিবর্তন করে।

বিশেষ দ্রষ্টব্য। আপনাকে নিশ্চিত করতে হবে যে আপনি নিজের তথ্য.পুলিস্টে সেট করেছেন।

View controller-based status bar appearance to YES

2

আপনি যদি মডেল উপস্থাপনা ব্যবহার করছেন তবে আপনাকে সেট করতে হবে:

viewController.modalPresentationCapturesStatusBarAppearance = true


0

উদ্দেশ্য সি এর জন্য আপনার প্রয়োগের এই লাইনটি ফিনিশলঞ্চ পদ্ধতিটিতে যুক্ত করুন

UIApplication.sharedApplication.statusBarStyle = UIStatusBarStyleLightContent;

3
এটি আইওএস 9
এমকে_দেব

0

ওয়েবকিটভিউ ব্যবহার করে

সুইফট 9.3 আইওএস 11.3

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!
    var hideStatusBar = true

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
        let myURL = URL(string: "https://www.apple.com/")
        let myRequest = URLRequest(url: myURL!)
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red

         webView.load(myRequest)

    }
}

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

3
সুইফট 9.3? ভুল বছর, মার্টি
আইওএস ইউনিট

আমি এক্সপেল "স্ট্যাটাসবার" এর জন্য প্রাইভেট এপিআই ব্যবহার করা দূরে থাকার পরামর্শ দিই। অ্যাপল প্রতিবার এপিআইতে পরিবর্তন করে! এবং যখন অ্যাপল সেই এপিআই পরিবর্তন করে আপনার অ্যাপ্লিকেশনটি ক্রাশ হতে পারে এবং এটি স্ট্যাটাস বারটি আর পরিবর্তন করবে না। এটি আপনাকে আবার অন্য সমাধানের জন্য অনুসন্ধান করতে সক্ষম করবে।
ডকি

0

আপনি যদি এখনও পদ্ধতিটিতে স্ট্যাটাস বার শৈলীর ভিত্তি পরিবর্তন করতে অক্ষম হন

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

আপনি এই পদ্ধতিটি ব্যবহার করে দেখতে পারেন:

override viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.barStyle = .black
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.