এক্সকোড 11.4। নেভিগেশনের শিরোনামের রঙ স্টোরিবোর্ড থেকে কালো গেল


55

আমি সম্প্রতি আমার এক্সকোডকে 11.4 এ আপডেট করেছি। আমি যখন ডিভাইসে অ্যাপটি চালাচ্ছি তখন আমি লক্ষ্য করেছি যে স্টোরিবোর্ড থেকে সেট করার সময় আমার সমস্ত নেভিগেশন আইটেমের শিরোনাম সম্পূর্ণ কালো হয়ে গেছে। এখানে চিত্র বর্ণনা লিখুন

আপনি কোড থেকে দুটিও পরিবর্তন করতে পারবেন না, নিম্নলিখিত কোডের লাইনটি আর কাজ করে না

self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]

আমি এটি কিছু আইওএস 13 স্টাফ ইউআইএনএভিগেশনবার অ্যাপেরেন্স ব্যবহার করে কেবল এটির কাজ করি

@available(iOS 13.0, *)
    private func setupNavigationBar() {
        let app = UINavigationBarAppearance()
        app.titleTextAttributes = [.foregroundColor: UIColor.white]
        app.backgroundColor = Constants.Color.barColor
        self.navigationController?.navigationBar.compactAppearance = app
        self.navigationController?.navigationBar.standardAppearance = app
        self.navigationController?.navigationBar.scrollEdgeAppearance = app

        self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
    }

কেউ আমাকে কেন ব্যাখ্যা করতে পারেন ??? এটি একটি গুরুত্বপূর্ণ বাগ, বা কোনও নতুন লুকানো বৈশিষ্ট্য?


3
এখানে একই সমস্যা এবং আমি এটি সংশোধন করার জন্য কিছুই করার পাই না। আমি মনে করি এটি একটি বাগ: /
জর্ডান ফ্যাভ্রে

অ্যাপল। Uggh। সত্যি?
ড্যানিয়েল


এটি এক্সকোড ইন্টারফেস বিল্ডার বাগ আপডেট এক্সকোড থেকে 11.4.1
নিনজা ডেভেলপার

উত্তর:



36

পরিবর্তে ইউআইএনএভিগেশন বার অ্যাপেরেন্সটি ব্যবহার করে এটি আমার জন্য এটি স্থির করে: আপনার অ্যাপের নেভিগেশন বারটি কাস্টমাইজ করে

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = UIColor.black
    appearance.titleTextAttributes = [.foregroundColor: UIColor.white] // With a red background, make the title more readable.
    self.navigationBar.standardAppearance = appearance
    self.navigationBar.scrollEdgeAppearance = appearance
    self.navigationBar.compactAppearance = appearance // For iPhone small navigation bar in landscape.
} else {
    self.navigationBar.barTintColor = UIColor.black
    self.navigationBar.tintColor = UIColor.white
    self.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
}

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

... বা অ্যাপডেলিগেটের জন্য , অ্যাপ-ওয়াইড:

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = UIColor.black
    appearance.titleTextAttributes = [
        NSAttributedStringKey.foregroundColor: UIColor.white
    ]

    let buttonAppearance = UIBarButtonItemAppearance()
    buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]
    appearance.buttonAppearance = buttonAppearance

    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
    UINavigationBar.appearance().compactAppearance = appearance

    UIBarButtonItem.appearance().tintColor = UIColor.white
} else {
    UINavigationBar.appearance().barTintColor = UIColor.black
    UINavigationBar.appearance().titleTextAttributes = [
        NSAttributedStringKey.foregroundColor: UIColor.white
    ]
    UINavigationBar.appearance().tintColor = UIColor.white

    UIBarButtonItem.appearance().tintColor = UIColor.white
}

... AppDelegate জন্য, অ্যাপ্লিকেশন ব্যাপী, উদ্দেশ্য-সি তে:

if (@available(iOS 13, *)) {
    UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
    [appearance configureWithOpaqueBackground];
    appearance.backgroundColor = UIColor.whiteColor;
    appearance.titleTextAttributes = titleAttributes;

    UIBarButtonItemAppearance *buttonAppearance = [[UIBarButtonItemAppearance alloc] init];
    buttonAppearance.normal.titleTextAttributes = barButtonItemAttributes;
    appearance.buttonAppearance = buttonAppearance;

    UINavigationBar.appearance.standardAppearance = appearance;
    UINavigationBar.appearance.scrollEdgeAppearance = appearance;
    UINavigationBar.appearance.compactAppearance = appearance;

    [[UINavigationBar appearance] setTintColor:UIColor.blackColor];
} else {
    [[UINavigationBar appearance] setBarTintColor:UIColor.whiteColor];
    [[UINavigationBar appearance] setTintColor:UIColor.blackColor];
    [[UINavigationBar appearance] setTranslucent:false];
    [[UINavigationBar appearance] setTitleTextAttributes: titleAttributes];
    [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonItemAttributes forState:UIControlStateNormal];
}

ধন্যবাদ, এটি একটি সঠিক উত্তর! , আইওএস-এ 13 অ্যাপল যুক্ত হয়েছে UINavigationBarAppearance()এবং পুরানো এক্সকোডের কোনও কারণ ছাড়াই আমরা এর উপর নির্ভর করার জন্য শুদ্ধ হই নি, তবে এক্সকোড ১১.৪ থেকে এটি অবশ্যই ব্যবহার করবে UINavigationBarAppearance()বা শিরোনাম রঙটি সবসময় কালো বর্ণের হবে।
তুলিল

appearance.largeTitleTextAttributesবড় শিরোনাম জন্য।
স্কাউয়া

এটি দুর্দান্ত কাজ করে এবং আপনাকে ধন্যবাদ !, অ্যাপডেলিগেট থেকে সর্বজনীনভাবে এটি করার কোনও উপায় আছে কি?
স্লিকারডিসার

@ স্লিকারডিসার - হ্যাঁ! উদাহরণস্বরূপ আমার আপডেট হওয়া উত্তরটি দেখুন। চিয়ার্স।
স্টু কার্নে

1
@ রিচার্ড - আমি কেবলমাত্র উদ্দেশ্য-সি এর জন্য উত্তর যুক্ত করেছি। দুঃখিত, আমি আজ অবধি আপনার মন্তব্য দেখিনি।
স্টু কার্নি

14

স্টোরিবোর্ডে, আপনার নেভিগেশন কন্ট্রোলারের জন্য "বার টিন্ট" এর "ডিফল্ট" মানতে পরিবর্তন করুন, তারপরে আপনার কোডে আপনি এটিকে সাধারণভাবে যেমন পরিবর্তন করতে পারেন।


3
সেরা উত্তর. সত্যিই।
ভ্লাদিমির প্রিগারিন

2
এটি সঠিক উপায়
হুগো

1
সেরা আনওয়ার❗️ পিরিয়ড।
শ্যাডোশিপ

2
@ জ্যাক্টিং 8 হ্যাঁ, এটা ঠিক। তবে এক্সকোড ১১.৪ এর সাহায্যে যদি আপনি স্টোরিবোর্ডে ডিফল্ট রঙ সেট না করে থাকেন তবে প্রোগ্রামিয়ালি পরিবর্তন করে এটি কাজ করে না। আমি জানি না এটি কোনও সমস্যা কিনা।
শ্যাডোশিপ

1
এ তো ম্যাজিক!
18

6

এটি বাগ বা না তা নিশ্চিত নয়।

আমরা সেটাকে যেভাবে স্থির করেছি তা হ'ল "স্থিতি দণ্ড স্টাইল" প্রজেক্টের সেটিংটিতে অন্ধকার বা হালকা সামগ্রীকে সেট করে। এটি স্ট্যাটাস বারের পাঠ্য রঙকে হালকা বা গাark় মোডে থাকা ডিভাইসের ভিত্তিতে নির্ধারিত হওয়ার পরিবর্তে নির্দিষ্ট উপায়ে বাধ্য করবে will

তদতিরিক্ত, আপনার ইনফো.পিস্টে "কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি" "NO" এ সেট করতে হবে। এই মান ব্যতীত "স্ট্যাটাস বার শৈলী" ওভাররাইড করা হবে।

এর পরে একটি কাস্টম নেভিগেশন নিয়ামক তৈরি করুন এবং এটি আপনার স্টোরিবোর্ডগুলিতে প্রয়োগ করুন।

class CustomNavigationController: UINavigationController {

 override func viewDidLoad() {
    super.viewDidLoad()
    setNavBar()
 }

 func setNavBar() {
    if #available(iOS 13.0, *) {
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        appearance.backgroundColor = UIColor.blue
        appearance.titleTextAttributes = [.foregroundColor: UIColor.yellow]
        self.navigationBar.standardAppearance = appearance
        self.navigationBar.scrollEdgeAppearance = appearance
        self.navigationBar.compactAppearance = appearance
    } else {
        self.navigationBar.barTintColor = UIColor.blue
        self.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.yellow]
    }
  }
}

* রঙগুলি সেট করা হয়েছে যাতে আপনি তাদের পরিষ্কারভাবে কাজ করতে দেখতে পান।

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

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

আশা করি এটা সাহায্য করবে


এটি কাজ করে। দেখে মনে হচ্ছে এটি বিশ্বব্যাপী স্টাইলটি সেট করে যা কার্যকর হয় না।
মোংগো

আপেলের শেষে একটি বাগ ডিফল্ট করুন। । না সাহায্যের কিন্তু বিরতি জিনিষ> করতে পারেন <
মাইকেল McKenna

2

কাজের দরকার নেই Xcode ইন্টারফেস বিল্ডারে একটি বাগ ound অ্যাপল এক্সকোড 11.4.1 এর জন্য আপডেট প্রকাশ করে

অ্যাপল বিকাশকারী রিলিজ নোট থেকে

ইন্টারফেস নির্মাতা

Xcode 11.4 দিয়ে নির্মাণের সময় স্টোরিবোর্ড এবং XIB নথিগুলিতে কিছু ইউআইএনএভিগেশনবার উপস্থিত বৈশিষ্ট্যগুলি সেট করে এমন একটি সমস্যা সমাধান করেছে। (60883063) (এফবি 7639654)

https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes


0

3/25 এ স্টু কার্নির প্রতিক্রিয়ার অনুরূপ, আমি আরও কয়েকটি বাস্তবায়নের বিশদ যুক্ত করেছি।

ইউআইএনএভিগেশন কন্ট্রোলারের একটি সাবক্লাস তৈরি করুন । উইল অ্যাপয়ারে নিম্নলিখিতটি যুক্ত করুন:

let isDarkMode = UserDefaults.standard.bool(forKey: "DarkMode")
let titleColor: UIColor = isDarkMode ? .white : .black
let navBarColor: UIColor = isDarkMode ? .black : .white
let tintColor: UIColor = isDarkMode ? .yellow : .red  //back button text and arrow color, as well as right bar button item

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = navBarColor
    appearance.titleTextAttributes = [.foregroundColor: titleColor]
    appearance.largeTitleTextAttributes = [.foregroundColor: titleColor]

    self.navigationBar.standardAppearance = appearance
    self.navigationBar.scrollEdgeAppearance = appearance
    self.navigationBar.compactAppearance = appearance // For iPhone small navigation bar in landscape.

    self.navigationBar.tintColor = tintColor //changes back button text and arrow color, as well as right bar button item
} else {
    self.navigationBar.barTintColor = navBarColor
    self.navigationBar.tintColor = tintColor
    self.navigationBar.titleTextAttributes = [.foregroundColor: titleColor]
    self.navigationBar.largeTitleTextAttributes = [.foregroundColor: titleColor]
}

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    let isDarkMode = UserDefaults.standard.bool(forKey: "DarkMode")
    return isDarkMode ? .lightContent : .default
}

আপনি যদি ইউআইএসউইচ আইবিএশন বা নির্বাচক পদ্ধতি থেকে গতিশীলভাবে নেভিগেশন বার এবং স্ট্যাটাস বার আপডেট করতে চান তবে নিম্নলিখিতগুলি যুক্ত করুন:

navigationController?.loadView()
navigationController?.topViewController?.setNeedsStatusBarAppearanceUpdate()

এছাড়াও, আপনার সমস্ত নেভিগেশন বার এবং বার বোতামগুলি আইবি-র ডিফল্ট রঙগুলিতে সেট করতে ভুলবেন না। এক্সকোডে একটি ত্রুটি রয়েছে বলে মনে হচ্ছে যেখানে আইবি রঙগুলি অগ্রগতিযুক্ত সেট রঙগুলিকে ওভাররাইড করে।


0

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

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    let backgroundImage = UIImage(named: "{NAVBAR_IMAGE_NAME}")?.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch)
    appearance.backgroundImage = backgroundImage
    self.navigationController?.navigationBar.compactAppearance = appearance
    self.navigationController?.navigationBar.standardAppearance = appearance
    self.navigationController?.navigationBar.scrollEdgeAppearance = appearance        
} else {
    self.navigationController?.navigationBar.barTintColor = Utils.themeColor
    let backgroundImage = UIImage(named: "{NAVBAR_IMAGE_NAME}")?.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch)
    self.navigationController?.navigationBar.setBackgroundImage(backgroundImage, for: .default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.