UIStatusBarStyle PreferredStatusBarStyle iOS 7 এ কাজ করে না


110

আমার আইফোন আইওএস 7 আমি সেট Xcode 5 নির্মিত অ্যাপ্লিকেশনে UIViewControllerBasedStatusBarAppearance=YESমধ্যে info.plist, আর আমার মধ্যে ViewControllerআমি এই কোড আছে:

-(UIStatusBarStyle) preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

তবে স্ট্যাটাস বারটি কালো পটভূমির বিপরীতে এখনও কালো।

আমি তার সম্ভাব্য জানেন সেটিং দ্বারা এই অ্যাপটি ব্যাপী পরিবর্তন করতে UIViewControllerBasedStatusBarAppearance=NOমধ্যে info.plist, কিন্তু আমি আসলে একটি এই পরিবর্তন করা প্রয়োজন viewControllerদ্বারা viewControllerরানটাইম এ ভিত্তিতে।


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

উত্তর:


281

আমি আবিষ্কার করেছি যে যদি আপনার navigationBar.barStyleভিউকন্ট্রোলারটি একটি নেভিগেশনকন্ট্রোলারের ভিতরে থাকে তবে নেভিগেশনকন্ট্রোলার স্ট্যাটাস বারস্টাইল নির্ধারণ করে।

আপনার navigationBar এর সেটিং barStyleথেকে UIBarStyleBlackTranslucentসাদা স্ট্যাটাস বার টেক্সট (অর্থাত। দেব UIStatusBarStyleLightContent), এবং UIBarStyleDefaultকালো স্ট্যাটাস বার টেক্সট দেব (অর্থাৎ। UIStatusBarStyleDefault)।

দ্রষ্টব্য যে আপনি ন্যাভিগেশনবারের মাধ্যমে এর রঙ পুরোপুরি পরিবর্তন করলেও এটি প্রয়োগ হয় barTintColor


এটি আমার কাছে
নিক

14
আমি বিশ্বাস করি কারণ এটা UINavigationController's preferredStatusBarStyleViewController এটা হোস্ট মাধ্যমে কল না, এবং পরিবর্তে ঠিক এর navigationBarStyle উপর ভিত্তি করে প্রদান করে থাকে।
এমএক্সসিএল

এক্ষেত্রে দর্শন কোনও নেভিগেশন নিয়ামকের ভিতরে নেই।
অ্যান্ড্রু স্মিথ

ধারণা নিয়ন্ত্রকের কোনও প্রয়োগকৃত পদ্ধতির চেয়ে বার স্টাইলটি অগ্রাধিকার গ্রহণ করে, এবং কেবলমাত্র মডেল ভিউ উপস্থাপন করার সময়, এই ধারণাটি খুব জবাবদিহি করতে পারে না!
মাতেজ

3
UIBarStyleBlackTranslucent UIBarStyleBlack
অবচয়

87

ঠিক আছে, কৌশল এখানে। আপনাকে কীটি "নিয়ন্ত্রক-ভিত্তিক স্থিতি বারটি" দেখুন এবং মানটি নংতে সেট করতে হবে do

এটি এই কীটির অর্থটি যা বোঝায় তার বিপরীতে, তবে আপনি মানটি সেট Noকরেও, আপনি এখনও স্থিতি বারের উপস্থিতি পরিবর্তন করতে পারেন, এবং এটি কোনও ভিউ নিয়ামককে প্রদর্শিত বা না দেখায়। সুতরাং এটি "হ্যাঁ" এর মতো কাজ করে তবে "না" এ সেট করে!

এখন আমি স্ট্যাটাস বারটি সাদা বা গা dark় পেতে পারি।


6
আমার জন্য এটি ভুল ছিল। কীটি "হ্যাঁ" তে সেট করা দরকার ছিল যেমনটি আপনি আশা করেছিলেন। আমি এক্সকোড 5.1 আইওএস 7.1 এ আছি, তাই সম্ভবত এটি পরিবর্তন হয়েছে।
joel.d

আমি পাশাপাশি এক্সকোড 5.1 এবং আইওএস 7.1 ব্যবহার করছি এবং আমার পক্ষে কোনও কাজ করে নি ... স্ট্র্যাং।
অর্জুন মেহতা

আমি এই চাবিটি কোথায় যুক্ত করব?
হাদু

আপনার [AppName] -Info.plist ফাইল
সারেন

1
Xcode6.0, iOS 8.0- এর সাথে "YES" তে সেট "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারটি" কী সেট করলে এটি দুর্দান্ত কাজ করে
বিপোল্যাট

77

এর preferredStatusBarStyle()মধ্যে কাজ করার জন্য UINavigationControllerএবং UITabBarControllerআমি নিম্নলিখিত কোডটি যুক্ত করব যা বর্তমানে দৃশ্যমান দর্শনীয় নিয়ামক থেকে পছন্দসই স্থিতি বার শৈলী পাবে।

extension UITabBarController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return visibleViewController
    }
}

জন্য সুইফট 3 সেই পদ্ধতি কিন্তু বৈশিষ্ট্য নয়:

extension UITabBarController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

সুইফট 4.2 বৈশিষ্ট্য নতুন নামকরণ করা হয়েছে:

extension UITabBarController {
   open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
   open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

ব্যবহার

class ViewController: UIViewController {

    // This will be called every time the ViewController appears
    // Works great for pushing & popping
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

}

6
এই পর্যন্ত সবচেয়ে ভালো উত্তর হয় (যে UINavigationController বা UITabBarController অ্যাপ্লিকেশানগুলি জন্য
Kesava

1
এটার ব্যবহার কী?
আনবিস

@ আনঞ্জন এই পদ্ধতিগুলি ইউআইকিট দ্বারা ব্যবহৃত হয় are আপনার প্রকল্পে এটি যুক্ত করা ছাড়া আপনার আর কিছু করার দরকার নেই।
ড্যানিয়েল উড

@ ড্যানিয়েলউইড হ্যাঁ আমি এটি বুঝতে পেরেছিলাম এবং সম্পূর্ণরূপে ভুলে গিয়েছি যে আমি আমার আগের প্রকল্পগুলির একটিতে এই একই জিনিসটি ব্যবহার করেছি, যদিও কিছুটা ভিন্নভাবে।
আনবিস

এটি সত্যই সেরা উত্তর
মুসা আলমাট্রি

33

আমি কিছুটা দেরিতে এদিকে আসতে পারি তবে অন্য কারও দ্বারা কার্যকরী এবং যাচাই করা অ্যাপের প্রশস্ত সমাধানের সন্ধান করছে ase

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

extension UINavigationController {
    public override func preferredStatusBarStyle() -> UIStatusBarStyle {
        if let rootViewController = self.viewControllers.first {
            return rootViewController.preferredStatusBarStyle()
        }
        return super.preferredStatusBarStyle()
    }
}

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

আশা করি এটি যে কারও জন্য প্রয়োজন হতে পারে সহায়তা করে।


2
সুইফট ২.০ এ আপনাকে শর্ত বিবরণীর "হিসাবে? ইউআইভিউউকন্ট্রোলার" মুছে ফেলতে হবে।
থমস কলমন

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

1
যদি আপনার নেভিগেশন কন্ট্রোলারের কোনও দেখার নিয়ামক না থাকে তবে এটি অসীম লুপের কারণ হতে পারে। return self.preferredStatusBarStyle()এই একই একই পদ্ধতিতে ফিরে কল করতে হবে।
ভালমাউন্টেন

1
আমার ক্ষেত্রে, রুটভিউ কনট্রোলার ব্যবহার না করে, স্ট্যাকের স্টাইলটি পরিবর্তিত হতে পারে এমন সময় আমি টপভিউ কনট্রোলার ব্যবহার করেছি।
রিক সান্তোস

2
@Unome visibleViewControllerএমনকি ভাল হবে
Coeur

21

গৃহীত উত্তরের আরও বিশদ সরবরাহ করতে, আপনার অ্যাপের প্রতিনিধিটির didFinishLaunchingWithOptions:পদ্ধতিতে নিম্নলিখিত লাইনটি দিন :

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

তারপরে, আপনার তথ্য.পুলিস্টে View controller-based status bar appearanceএটি যুক্ত করুন এবং এতে সেট করুন NO

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

সম্পাদনা : আপনি কোনও কোড টাইপ না করে এটিও করতে পারেন: https://stackoverflow.com/a/18732865/855680


1
নোট করুন যে এই ভাবে আইওএস 9.0 থেকে অবহিত করা হয়েছে
মোহাম্মদ সালাহ

10

ভিডিডলিডে কেবল এটি লিখুন

[self setNeedsStatusBarAppearanceUpdate];

শুধু এটি করুন এবং এটি কাজ করবে

আপনি দয়া করে এটি চেষ্টা করতে পারেন

Set UIViewControllerBasedStatusBarAppearance to NO.
Call [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

আপনার প্রশ্নে আরও একটি জিনিস আমি দেখেছি যে আপনি এই পদ্ধতিটি লিখেছেন

 -(void)UIStatusBarStyle PreferredStatusBarStyle ()
        {
            return UIStatusBarStyle.LightContent;
        }

তবে এটি এমন হওয়া উচিত

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

এর ফলে পছন্দের স্ট্যাটাসবার্ট স্টাইল পদ্ধতিটি কল করার কারণ নেই, তবে এখনও স্ট্যাটাস বারটি কালো।
অ্যান্ড্রু স্মিথ

দয়া করে আমার আপডেট হওয়া উত্তরটি দেখুন ... তা যদি কাজ করে বা না হয় তবে আমাকে দ্রুত জানতে দিন
ব্যবহারকারী 1531343

আমার মূল প্রশ্নটি স্পষ্টতই বলেছে যে স্থিতি বারের নিয়ন্ত্রণ দর্শন দ্বারা আমার দেখার দরকার।
অ্যান্ড্রু স্মিথ

আপনি কি আমার আপডেট হওয়া প্রশ্নের সাথে আপনার কোডটি পরীক্ষা করতে পারেন?
ব্যবহারকারী 1531343

1
[self setNeedsStatusBarAppearanceUpdate];যেমন একটি দুর্দান্ত পদ্ধতি, আপনাকে ধন্যবাদ!
সুপারট্যাকনোবফ

6

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

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

স্থিতি দণ্ডের উপস্থিতির আপডেটটি আপনি যেভাবে ট্রিগার করবেন তা হ'ল setNeedsStatusBarAppearanceUpdateযা preferredStatusBarStyleআবার ট্রিগার করে এবং পদ্ধতিটি কী করে তা অনুসারে ইউআই আপডেট করে

public protocol StatusBarStyleHandler {
    var preferredStatusBarStyle: UIStatusBarStyle { get }
}

public class CustomNavigationCotnroller: UINavigationController {

    public override var preferredStatusBarStyle: UIStatusBarStyle {
        if let statusBarHandler = visibleViewController as? StatusBarStyleHandler {
            return statusBarHandler.preferredStatusBarStyle
        }

        return .default
    }
}

তারপরে ব্যবহার

public class SomeController: UIViewController, StatusBarStyleHandler {

    private var statusBarToggle = true

    // just a sample for toggling the status bar style each time method is called
    private func toggleStatusBarColor() {
        statusBarToggle = !statusBarToggle
        setNeedsStatusBarAppearanceUpdate()
    }

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

এই সমস্যাটি কেন এবং কীভাবে এই সমস্যার সমাধান করে তা আপনি যদি ব্যাখ্যা করতে পারেন তবে এই পোস্টটি অনেক উন্নত হবে।

ইউআইএনএভিগেশন কন্ট্রোলার সাবক্লাসিংয়ের পরিবর্তে আপনি কেবল ইউআইএনএভিগেশন কন্ট্রোলারের জন্য একটি এক্সটেনশন তৈরি করতে পারেন এবং সাবক্লাস না করে একই ফলাফল অর্জন করতে পারেন।
wilforeal

4

1) পুরো প্রকল্পের জন্য একটি সেটিংস:

যদি উপলভ্য থাকে তবে UIViewControllerBasedStatusBarAppearanceআপনার তথ্য.পুলিস্ট থেকে কী-মান জুটিটি সরিয়ে ফেলুন, বা NOএটি অপসারণ না করে সেট করুন । এটি যদি আপনার তথ্য.পুলিস্টে উপলব্ধ না হয় তবে কিছুই করবেন না। ডিফল্ট NOএই সম্পত্তি জন্য।

আপনার AppDelegate.m তে নীচে কোড যুক্ত করুন:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

2) বিভিন্ন দেখুন কন্ট্রোলারের জন্য বিভিন্ন সেটিংস:

যোগ UIViewControllerBasedStatusBarAppearanceআপনার info.plist চাবিকাঠি-মান জোড়া এবং এটি সেট YES

যদি আপনার ভিউ কন্ট্রোলার নেভিগেশন কন্ট্রোলারে এম্বেড না থাকে। মাইভিউকন্ট্রোলার বলি। আপনার মাইভিউকন্ট্রোলআর.এম ফাইলটিতে কেবল নীচের কোড যুক্ত করুন। যদি আপনার ভিউ কন্ট্রোলার নেভিগেশন কন্ট্রোলারে এম্বেড থাকে তবে একটি নতুন কোকো টাচ ক্লাস তৈরি করুন এবং এটি ইউআইএনএভিগেশন কন্ট্রোলারের সাবক্লাস করুন। মাইএনসি বলি। ডান ফলকে আপনার স্টোরিবোর্ডে নেভিগেশন কন্ট্রোলার ভিউ নির্বাচন করুন; ইউটিলিটিস -> পরিচয় পরিদর্শক -> কাস্টম ক্লাস -> ক্লাস, "মাইএনসি" টাইপ করুন। আপনার "মাইএনসি" কোকো টাচ ক্লাসের সাথে স্টোরিবোর্ড ভিউকে সংযুক্ত করার পরে, আপনার MyNC.m এর নীচে কোড যুক্ত করুন:

- (BOOL)prefersStatusBarHidden {
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

আইওএস 9 ইউআইভিউউকন্ট্রোলারবিডস্ট্যাটাসবার অ্যাপ অ্যাপ্লিকেশনটিতে ডিফল্টরূপে হ্যাঁ মান রয়েছে, কারণ আমি এটি নিজেই .plist এ যুক্ত করতে এবং সঠিকভাবে কাজ করার জন্য NO এ সেট করা দরকার।
মোহাম্মদ অসীম

4

এমনকি এখানে সমস্ত উত্তর দিয়ে আমি এখনও আমার জন্য সঠিক সমাধানটি খুঁজে পাইনি, কিন্তু ড্যানিয়েলের উত্তর দিয়ে শুরু করেছি। আমি যা শেষ করেছি তা হ'ল:

override var preferredStatusBarStyle: UIStatusBarStyle {
     return visibleViewController?.preferredStatusBarStyle ?? .lightContent
}

নেভিগেশন কন্ট্রোলারগুলিতে (ট্যাবের মতো, কেবলমাত্র নির্বাচিত ভিউকন্ট্রোলার)। এবং তারপরে এটি শ্রদ্ধা করবে:

override var preferredStatusBarStyle: UIStatusBarStyle {
     return .lightContent
}

আপনি অন্যথায় সেট না করে প্রতিটি ভিউ কন্ট্রোলারে। আমার setNeedsStatusBarAppearanceUpdate()যে কোনও জায়গায় কল করার দরকার নেই , আপনি প্রতিটি ভিউ কন্ট্রোলারে পৌঁছালে তা আপডেট হয়।


2
ঘন্টাখানেক লড়াই করে লড়াই করার পরে আমি প্রায় অভিন্ন সমাধান দিয়ে শেষ করেছি।
স্কট জংউথर्थ

এক পর্যায়ে এটি ঠিক করা হয়েছে বলে মনে হয়, কেবলমাত্র প্রতিটি ভিসিতে পছন্দের স্ট্যাটাসবার্ট স্টাইল ব্যবহার করা এখন আমার পক্ষে ভাল কাজ করে।
অ্যান্ড্রু প্লামার

4

আইওএস 13 সমাধান

সর্বাধিক ভোট প্রাপ্ত উত্তরটিতে "লিগ্যাসি" কোড uses ব্যবহার করা হয়েছে 👎

barStyleসম্পত্তি সেট করা এখন (আইওএস 13+) একটি "লিগ্যাসি কাস্টমাইজেশন" হিসাবে বিবেচিত। অ্যাপলের মতে ,

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

আপনার প্রয়াস সম্পর্কে - আপনি সঠিক পথে ছিলেন!

UINavigationControllerUIViewController(যারা জানত 🙃) এর একটি সাবক্লাস !

অতএব, নেভিগেশন কন্ট্রোলারে এম্বেড থাকা ভিউ কন্ট্রোলার উপস্থাপন করার সময়, আপনি সত্যিই এমবেড করা ভিউ কন্ট্রোলারগুলি উপস্থাপন করছেন না; আপনি নেভিগেশন কন্ট্রোলার উপস্থাপন করছেন! UINavigationController, একটি সাবক্লাস হিসাবে UIViewController, উত্তরাধিকার সূত্রে প্রাপ্ত preferredStatusBarStyleএবং childForStatusBarStyleযা আপনি পছন্দসই হিসাবে সেট করতে পারেন।

নিম্নলিখিত যে কোন পদ্ধতিতে কাজ করা উচিত:

  1. এর preferredStatusBarStyleমধ্যে ওভাররাইড করুনUINavigationController

    • preferredStatusBarStyle( ডক ) - দর্শন নিয়ামকের জন্য পছন্দসই স্ট্যাটাস বার স্টাইল
    • সাবক্লাস বা প্রসারিত UINavigationController

      class MyNavigationController: UINavigationController {
          override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }

      অথবা

      extension UINavigationController {
          open override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
  2. এর childForStatusBarStyleমধ্যে ওভাররাইড করুনUINavigationController

    • childForStatusBarStyle( ডক ) - বলা হয় যখন সিস্টেমের স্থিতি দণ্ডের শৈলীর নির্ধারণের জন্য ভিউ কন্ট্রোলারের প্রয়োজন হয়
    • অ্যাপলের ডকুমেন্টেশন অনুসারে,

      "যদি আপনার ধারক দৃশ্যের নিয়ামকটি তার চাইল্ড ভিউ কন্ট্রোলারগুলির মধ্যে একটির থেকে তার স্ট্যাটাস বারের স্টাইলটি গ্রহণ করে, [এই সম্পত্তিটি ওভাররাইড করুন] এবং সেই শিশু দর্শন নিয়ামককে ফিরিয়ে দিন you আপনি যদি শূন্যতা ফিরে পান বা এই পদ্ধতিটিকে ওভাররাইড না করেন তবে নিজের জন্য স্ট্যাটাস বার শৈলী ব্যবহার করা হবে "যদি এই পদ্ধতি থেকে ফেরতের মান পরিবর্তন হয়, সেটনিডস্ট্যাটাসবার্পিয়ারেন্সআপডেট () পদ্ধতিতে কল করুন" "

    • অন্য কথায়, আপনি যদি এখানে সমাধান 3 প্রয়োগ করেন না, সিস্টেমটি উপরের 2 দ্রবণে ফিরে যাবে।
    • সাবক্লাস বা প্রসারিত UINavigationController

      class MyNavigationController: UINavigationController {
          override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }

      অথবা

      extension UINavigationController {    
          open override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }
    • আপনি উপরে যে কোনও ভিউ কন্ট্রোলার ফিরিয়ে দিতে পারেন। আমি নিম্নলিখিত একটি সুপারিশ:

      • topViewController(এর UINavigationController) ( ডক ) - নেভিগেশন স্ট্যাকের শীর্ষে ভিউ কন্ট্রোলার
      • visibleViewController(এর UINavigationController) ( ডক ) - ন্যাভিগেশন ইন্টারফেসে দৃশ্যমান দৃশ্যের সাথে সম্পর্কিত ভিউ কন্ট্রোলার (ইঙ্গিত: এতে "এমন একটি ভিউ কন্ট্রোলার অন্তর্ভুক্ত থাকতে পারে যা নেভিগেশন নিয়ামকের নিজেই শীর্ষে উপস্থাপিত হয়েছিল")

দ্রষ্টব্য: আপনি সাবক্লাস করার সিদ্ধান্ত UINavigationControllerনিলে আইবিতে পরিচয় পরিদর্শকের মাধ্যমে আপনার ন্যাভাল কন্ট্রোলারদের কাছে সেই শ্রেণিটি প্রয়োগ করতে ভুলবেন না।

পিএস আমার কোডটিতে সুইফ্ট 5.1 সিনট্যাক্স uses ব্যবহার করা হয়েছে 😎


1
খুব সম্পূর্ণ উত্তর, ধন্যবাদ! এছাড়াও, আইওএস 13 এ আমি কিছুক্ষণের জন্য লড়াই করেছি, .defaultস্টাইলটি গা dark় মোড বিবেচনায় নিয়েছে এবং এটি নথিভুক্ত নয়, তাই আপনি যদি পূর্ববর্তী আইওএস সংস্করণগুলিকে সমর্থন করেন if #available(iOS 13, *) { return .darkContent } else { return .default }তবে আপনি স্ট্যাটাস বারের স্টাইলটি ম্যানুয়ালি সেটআপ করার চেষ্টা করলে আপনি যুক্ত করতে পারেন স্ট্যাটাস বারের পিছনে রঙ এবং সেই রঙটি "উজ্জ্বল"।
ভালকানিয়া

1
নোট করুন যে ওভাররাইড ভেরি করার এক্সটেনশন পদ্ধতিটি এক্সকোড ১১.৪ / আইওএস ১৩.৪-তে আর কাজ করে না
মার্ক এচেভারি

কারণ সুইফটে অবজেক্টিভ সি ক্লাসগুলি প্রসারণ করা উদ্দেশ্য সি বিভাগের মাধ্যমে প্রয়োগ করা হয়। অবজেক্টিভ সি বিভাগগুলির মাধ্যমে ওভাররাইডিং পদ্ধতিগুলি সুপারিশ করা হয় না এবং সম্ভবত এটির বিরতি ঘটে। স্ট্যাকওভারফ্লো.com
মার্ক এচেভারি

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

1

যদি আপনি স্প্ল্যাশস্ক্রিনের সময় স্ট্যাটাসবারটি আড়াল করতে চেয়েছিলেন তবে স্টাইলটি হালকা বিষয়বস্তুতে পরিবর্তন করতে চেয়েছিলেন (স্ট্যাটাসবারি ইনটাইটেললি হিডেন অফ প্লিস্টে স্প্ল্যাশ-এ স্ট্যাটাস বারটি আড়াল করার জন্য কোনও হ'ল নয়), আপনি এটিকে অ্যাপ্লিকেশনটির ডিডফিনিশলঞ্চিং উইথঅ্যাপশন পদ্ধতিতে হালকা কনটেন্টে পরিবর্তন করতে পারেন।

[[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

1

দ্রুত উদাহরণ

AppDelegate.swift এ

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent;

    return true
}

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


1

আপনি যদি ব্যবহার করছেন তবে আপনি NavigationControllerসাবক্লাস করতে পারেনNavigationController যাতে এটির চাইল্ড ভিউ কন্ট্রোলারের সাথে পরামর্শ করে

// মাই কাস্টমনাভিগেশন কন্ট্রোলার

- (NSUInteger)supportedInterfaceOrientations {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk shouldAutorotate];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk preferredStatusBarStyle];
}

- (UIViewController *)findChildVC {
    return self.viewControllers.firstObject;
}

1

সুইফট 4.2

extension UITabBarController {
    open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

নোট করুন যে ওভাররাইড ভেরি করার এক্সটেনশন পদ্ধতিটি এক্সকোড ১১.৪ / আইওএস ১৩.৪-তে আর কাজ করে না
মার্ক এচেভারি

টুইট অদ্ভুত লাগে।
ব্যাচেস্লাভ

কারণ সুইফটে অবজেক্টিভ সি ক্লাসগুলি প্রসারণ করা উদ্দেশ্য সি বিভাগের মাধ্যমে প্রয়োগ করা হয়। অবজেক্টিভ সি বিভাগগুলির মাধ্যমে ওভাররাইডিং পদ্ধতিগুলি সুপারিশ করা হয় না এবং সম্ভবত এটির বিরতি ঘটে। দেখুন stackoverflow.com/a/38274660/2438634
মার্ক Etcheverry

@ মার্সএটিচেভারি 'প্রস্তাবিত নয়'! = 'এটি কখনই ব্যবহার করবেন না!' jul2018 এর জন্য উত্তরটি সঠিক ছিল। এমনকি এই উত্তরটি আপ টু ডেট নয় এটি এটিকে নিম্নোক্ত করার কোনও কারণ নয়। আমি ভবিষ্যতটি দেখতে পাচ্ছি না
ভাইচাস্লাভ

0

আপনি স্থিতি দণ্ড শৈলী সেট করতে পারেন। এটি আইওএস 6 এবং নীচের মতো স্ট্যাটাস বারের অনুরূপ।
আপনার ভিউ কন্ট্রোলারে এই পদ্ধতিগুলি আটকান

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleBlackOpaque;
}

এবং ভিউ থেকে এই পদ্ধতিটি কল করুন এটি লোড হয়েছে did

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
    {
       [self setNeedsStatusBarAppearanceUpdate];
    }

আপনি কি [self setStatusBarNeedsUpdate]দ্বিতীয় ব্লক মানে ? (বা কমপক্ষে অন্য কিছু)।
এমএক্সসিএল

0

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

এই নোটটি একই রকম কাঠামোযুক্ত অন্যদের সহায়তা করতে পারে! সুতরাং মূলত আপনি নতুন UIWindow এর ViewController এ উপরে উল্লিখিত সমাধানগুলি প্রয়োগ করতে পারেন।

আবার এটি একটি নির্দিষ্ট কেস।

ধন্যবাদ


-1

আপনার ইউআইভিউকন্ট্রোলারে সুইফ্ট 3 এর জন্য:

override var preferredStatusBarStyle : UIStatusBarStyle { return UIStatusBarStyle.lightContent }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.