এক্সকোড 5.1 এবং আইওএস 7.1 এ আপগ্রেড করার পরে সিগন ট্রানজিশনের সময় নেভিগেশন বারে অন্ধকার ছায়া


92

যখন আমি একজন মাস্টার - বিশদ নেভিগেশন নিয়ামক হিসাবে পিতামাতা এবং শিশু নিয়ন্ত্রণকারীদের মাঝে পিছনে নেভিগেট করছি, আমি উপরে নেভিগেশন বারের ডানদিকে একটি অন্ধকার ছায়া দেখছি। আমি এক্সকোড 5.1 এ আপগ্রেড করার পরে এটি শুরু হয়েছিল। এটি মোটামুটি এবং বিভ্রান্তিকর মনে হয়। আমি কীভাবে এ থেকে মুক্তি পাব?

উত্তর:


144
self.navigationController.view.backgroundColor = [UIColor whiteColor];

আমি নেভিগেশন নিয়ামকের দৃষ্টির পটভূমি রঙ সেট করে এই সমস্যাটি সমাধান করেছি।


এই উত্তরটি আসলে খুব ভাল। কোনও কারণে ইন্টারফেস বিল্ডার আপনাকে আপনার নেভিগেশন কন্ট্রোলারের ভিউ অ্যাক্সেস করতে দেয় না, তবে দেখে মনে হচ্ছে একটি darkColorদৃশ্য এখনও আছে এবং এই সমস্যাটি সৃষ্টি করে।
superarts.org

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

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

4
দুঃখিত, আমি এই উত্তরটিকে উঁচু করে দিয়েছি কারণ উইন্ডো ব্যাকগ্রাউন্ড এই সমস্যার মূল কারণ নয়। দয়া করে আমার স্ক্রিনশটটি সংযুক্ত দেখুন: imgur.com/a/SH5Dp আপনি সমস্যাটি এখনও দেখতে পাবেন, গা shade় শেডটি কেবল সাদা রঙের প্রতিস্থাপন করা হয়েছে, আমার ধারণা বিশদ নিয়ামকটি 'ক্লিপড' পেয়েছে বা কোনওভাবে, এটি নাবারের নীচে কিছু আঁকবে না make ।
মারিওতাকু

4
ট্যাববারকন্ট্রোলার?।
বিশাল সিংহ

55
self.navigationController.navigationBar.translucent = NO; 

আরও নতুন সুইফ্ট সংস্করণগুলির জন্য:

navigationController?.navigationBar.isTranslucent = false

আপনি এটি কোথায় রাখলেন?
জোয়ারায়ার

মাস্টার ভিউ কন্ট্রোলারের ভিউডিডলড পদ্ধতিতে
নিহাট

ভিডিড অ্যাড অ্যাড করুন
আব্দুল ওয়াহেদ

আমি মনে করি এটি আসলে সঠিক উত্তর। navigationController.view.backgroundColor = .whiteআইওএস 11. এখন আর কাজ করে না
AnBisw

4
@ অঞ্জাওয়ান, navigationController.view.backgroundColor = .whiteআইওএস-এ কাজ করে ১২. নেভিগেশন বার থেকে স্বচ্ছ অপসারণ যখন প্রয়োজন হবে তখন ব্যবহার করা যাবে না, তবে কালো ছায়া নেই।
অ্যালেক্স মোটর

38

ননমেলিভের উত্তরটি নিখুঁত। ইন্টারফেস বিল্ডার এবং স্টিল ট্রান্সলেসসি'তে একই জিনিস অর্জন করতে , নেভিগেশন কন্ট্রোলারটি নির্বাচন করুন এবং view.backgroundColorস্ক্রিনশটের (আইডেন্টিটি ইন্সপেক্টরটিতে) দেখানো হিসাবে একটি ব্যবহারকারী সংজ্ঞায়িত রানটাইম অ্যাট্রিবিউট সেট করুন । সমস্ত ন্যাভিগেশন নিয়ন্ত্রকদের জন্য পুনরাবৃত্তি করুন যা এই সমস্যাটি দেখায়।

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

পরিচয় পরিদর্শক -> ব্যবহারকারী সংজ্ঞায়িত রানটাইম বৈশিষ্ট্য


4
আমি এই পদ্ধতির পছন্দ করি, ইন্টারফেস বিল্ডার UI যতটা সম্ভব স্টাফ করুন।
DazChong

আইওএস 8.4 সাহায্য করেনি
মাকসিম নিয়াজেভ

4
এক্সকোড 8.3.3 দিয়ে পুরোপুরি কাজ করে। কেবল পুনরায় জোর দেওয়ার জন্য অবশ্যই UINavigationControllerভিউকন্ট্রোলারের উপর নয়, সেট করা থাকতে হবে ।
জংলেদেভ

আমি একটি ট্যাবকনে একটি ন্যাভকন রেখেছিলাম এবং নেভকনের একটি ভিসির একটিতে "পুশের উপরে নীচে বারটি লুকান" ব্যবহার করার সময় উভয় বারে (উপরে এবং নীচে) এর ছায়া দেখতে পেলাম। ন্যাভকনে সাদা ব্যাকগ্রাউন্ড সেট করা উভয় ছায়া স্থির করে। ধন্যবাদ!
nh32rg

6

এটি একটি বাগ বলে মনে হচ্ছে যা আইওএস 7.1 এ চালু হয়েছিল। আমার ক্ষেত্রে এটি ইউআইটিউলবার সরাসরি নেভিগেশন বারের নীচে স্থাপনের কারণে ঘটে। অন্ধকার ছায়াটিও ਪਾਰবর্ণ ট্যাব বারে উপস্থিত হয়।

ছায়াটি ইউআইটিউলবারের পটভূমি দর্শনের কারণে হয়েছে বলে মনে হচ্ছে। আমি এখন সরঞ্জামদণ্ডের সাথে ভিউ কন্ট্রোলারে এই কাজটি ব্যবহার করি যা সংক্রমণের সময় সরঞ্জামদণ্ডের পটভূমি দৃশ্যটি লুকায়:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    UIView *toolbarBackgroundView = [self.toolbar findViewRecursively:^BOOL(UIView *subview, BOOL *stop) {
        BOOL isToolbarBackgroundView = ([subview isKindOfClass:[UIImageView class]]
                                        && [NSStringFromClass(subview.class) isEqualToString:@"_UIToolbarBackground"]);
        if (isToolbarBackgroundView) {
            *stop = YES;
        }
        return (! isToolbarBackgroundView);
    }];
    if (toolbarBackgroundView) {
        // fade toolbar background view back in
        [UIView animateWithDuration:0.1f animations:^{
            toolbarBackgroundView.alpha = 1.0f;
        }];
    }
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    UIView *toolbarBackgroundView = [self.toolbar findViewRecursively:^BOOL(UIView *subview, BOOL *stop) {
        BOOL isToolbarBackgroundView = ([subview isKindOfClass:[UIImageView class]]
                                        && [NSStringFromClass(subview.class) isEqualToString:@"_UIToolbarBackground"]);
        if (isToolbarBackgroundView) {
            *stop = YES;
        }
        return (! isToolbarBackgroundView);
    }];
    if (toolbarBackgroundView) {
        // hide toolbar background view
        toolbarBackgroundView.alpha = 0.0f;
    }
}

এই জন্য কোড [UIView findViewRecursively:]

@interface UIView (FindSubview)

- (UIView*)findViewRecursively:(BOOL(^)(UIView* subview, BOOL* stop))recurse;

@end

@implementation UIView (FindSubview)

- (UIView*)findViewRecursively:(BOOL(^)(UIView* subview, BOOL* stop))recurse {
    for (UIView* subview in self.subviews) {
        BOOL stop = NO;
        if (recurse(subview, &stop)) {
            UIView* view = [subview findViewRecursively:recurse];
            if (view) return view;
        } else if (stop) {
            return subview;
        }
    }
    return nil;
}

@end

আমি এই রাডারটি দায়ের করেছি: http://openradar.appspot.com/16418845


4
যদি আপনি কোনও রূপান্তরকারী নেভিগেশন বার না চান তবে আপনার সমাধানটি ঠিক আছে।
টম

পাওয়ার সহজ উপায় আছে backgroundView[self.toolbar valueForKey:@"_backgroundView"]। দয়া করে নোট করুন এটি একটি বেসরকারী এপিআই, তবে আমি মনে করি আপনি অ্যাপলের হাতে ধরা পড়বেন না কারণ _backgroundViewএটি কেবল একটি জেনেরিক নাম।
ননামেলাইভ

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

4

দেখে মনে হচ্ছে যে কোনও বার (ট্যাববার বা সরঞ্জামদণ্ড) যা স্বচ্ছ।
সুতরাং এটির সমাধানের একটি উপায় হ'ল _tabBar.translucent = NO;(আমার ক্ষেত্রে) সেট করা । এটি নেভিগেশন বারের ট্রান্সফুল্যান্ট ছেড়ে যাওয়ার সময় শীর্ষস্থানীয় নেভিগেশন বারের নীচে অনাকাঙ্ক্ষিত ছায়াটিকে বাধা দেয়। দুর্ভাগ্যক্রমে নীচের অংশটি যদিও আর স্বচ্ছ নয়।

এটি আবার স্বচ্ছতে সেট করা যেতে পারে তবে পুরো ধাক্কা এনিমেশন শেষ হওয়ার পরে এই সম্পত্তিটি স্যুইচ করা ভালভাবে লক্ষণীয় happen

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

/*  create a simple quick animation of the bottom bar
    just before pushing the new controller */
[UIView animateWithDuration:0.1
                 animations:^{
                     _tabBar.barTintColor = [UIColor colorWithWhite:0.97254901960784 alpha:1.0]; // this is the closest color for my case
                     _tabBar.translucent = NO;
                 } completion:^(BOOL finished) {
                     /* now when the animation that makes the bar not translucent
                        is finished we can push the new controller
                        the controller is instantiated before the animation code */
                     [self.navigationController pushViewController:controller animated:YES];
                 }];

তারপরে viewDidAppear:আমি কেবল তা ফিরিয়ে দিই:

[UIView animateWithDuration:0.1
             animations:^{
                     _tabBar.barTintColor = nil;
                     _tabBar.translucent = YES;
                 }];

বিশেষত চেহারায় সামান্য পরিবর্তন রয়েছে তবে এটি সবে লক্ষণীয় এবং এটি নেভিগেশন বারের নীচে ছায়া থাকার চেয়ে ভাল।

আশা করি এটি অপরদের বারগুলি স্বচ্ছ রাখতে অবধি সাহায্য করবে যতক্ষণ না অ্যাপল এই আচরণটি ঠিক করে দেয় কারণ বারগুলিকে কিছু ক্ষেত্রে লুকানো বলে বোঝানো হয় এটির অন্যান্য পোস্টগুলিতে বিশেষত প্রস্তাবিত ছিল না UITabBar


আমি @ ম্যানমালের সমাধান গ্রহণ করে এই সমস্যাটি সমাধান করতে সক্ষম view.backgroundColorহয়েছি the স্টোরিবোর্ডে আপনার ইউআইটিববারকন্ট্রোলারের জন্য রানটাইম বৈশিষ্ট্যটি সংজ্ঞায়িত করে একটি সাদা রঙে সেট করেছি।
জামেস্ক

4

এটি সুইফটে আমার জন্য কাজ করে

ইন AppDelegateউপর didFinishLaunchingWithOptionsপদ্ধতি, আমি এই সেট করুন:

UIApplication.shared.windows.first?.backgroundColor = .white

4

হালকা এবং গা dark ় উভয় থিম এবং পুরানো আইওএস সংস্করণে এটি আইওএস 13 এ আমার জন্য কাজ করে ।

application(didFinishLaunchingWithOptions)পদ্ধতিটিতে AppDelegate এ নিম্নলিখিত কোড যুক্ত করুন :

if #available(iOS 13.0, *) {
    window?.backgroundColor = UIColor.systemBackground
} else {
    window?.backgroundColor = UIColor.white
}

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

3

এখানে আমার প্রকরণ আছে ... এটিতে টমের উত্তরের চেয়ে অনেক কম কোড দরকার, এবং এটি আরও দক্ষ। এটি যদি আপনি একটি স্বচ্ছ নেভিগেশন বার চান এবং সেই ছায়ার সমস্যাটিও ঠিক করতে চান।

উত্স ভিউকন্ট্রোলারে (এটি নেভিগেশন কন্ট্রোলারে এমবেড করা আছে) ...

- (void)viewDidAppear:(BOOL)animated
{
     self.navigationController.navigationBar.translucent = YES;
}

এবং

 - (void)viewWillDisappear:(BOOL)animated
 {
     self.navigationController.navigationBar.translucent = NO;
 }

ফলটি টম যা করেন (চাক্ষুষভাবে, শেষ ব্যবহারকারীর কাছে) এর মতো এবং এটি প্রয়োগ করা আরও সহজ। আশাকরি এটা সাহায্য করবে...


3
self.navigationController!.navigationBar.translucent = false;

এটি আমার পক্ষে এটি ফাংশনের ভিতরে রাখার জন্য কাজ করে যেখানে আপনি নতুন ভিউকন্ট্রোলারকে ধাক্কা দেন


ক্রেজি, কিন্তু সমস্ত উত্তরের মধ্যে, পরবর্তী ভিসির কাছে ঠেলাঠেলি করে ফাংশনে এটি রাখার ধারণাটি ছিল!
কল্টসুমাব

3

নিম্নলিখিতটি নেভিগেশন বারকে স্বচ্ছ করেও কাজ করে এবং ছেড়ে দেয়:

[UIApplication sharedApplication].keyWindow.backgroundColor = [UIColor whiteColor];


1

এটি স্টক আইওএস প্রয়োগের মতো নয়, সমস্যাটি সমাধানের এটি দুর্দান্ত উপায়:

- (void)viewWillAppear:(BOOL)animated {
    [UIView animateWithDuration:0.35f animations:^{
        self.tabBarController.tabBar.alpha = 1.0f;
    }];
}

- (void)viewWillDisappear:(BOOL)animated {
    [UIView animateWithDuration:0.35f animations:^{
        self.tabBarController.tabBar.alpha = 0.0f;
    }];
}

আপনি ট্যাব বারের একটি সুন্দর ফ্যাড-ইন / ফেড-আউট অ্যানিমেশন পাবেন। মূলটিতে কোড যুক্ত করুন UIViewController


-1

বা যদি আপনি ইন্টারফেস বিল্ডার ব্যবহার করে থাকেন তবে আপনি কেবল আপনার নেভিগেশন কন্ট্রোলার থেকে নেভিগেশন বারটি নির্বাচন করতে পারেন এবং সেই অদ্ভুত প্রভাব থেকে মুক্তি পেতে অ্যাট্রিবিউট ইন্সপেক্টরটিতে স্টাইল এবং বার টিন্টের মধ্যে ট্রান্সলুসেন্ট চেকবক্সটি নির্বাচন করতে পারেন -

ইন্সপেক্টর

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