ইউআইএনএভিগেশন বার 1 পিক্স নীচের লাইনটি কীভাবে আড়াল করবেন


443

আমার একটি অ্যাপ্লিকেশন রয়েছে যা কখনও কখনও সামগ্রীটির সাথে মিশ্রণের জন্য এটির নেভিগেশন বারের প্রয়োজন হয়।

এই বিরক্তিকর ছোট্ট বারটির হাত থেকে কীভাবে মুক্তি পাওয়া যায় বা রঙ পরিবর্তন করতে হয় তা কি কেউ জানেন?

আমার নীচের অবস্থার চিত্রটিতে - আমি "রুট ভিউ কন্ট্রোলার" এর নীচে 1px উচ্চতার লাইনটি সম্পর্কে বলছি

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


এটি পর্যালোচনা করুন: stackoverflow.com/questions/19101361/…
কুলদীপ

কীভাবে নেভিগেশন উচ্চতা 1px বৃদ্ধি?
সুরেশ দুরিশেট্টি

উত্তর:


738

আইওএস 13 এর জন্য:

.shadowColorসম্পত্তি ব্যবহার করুন

যদি এই সম্পত্তিটি শূন্য থাকে বা এতে পরিষ্কার রঙ থাকে তবে বারটি কোনও ছায়া দেখায় না

এই ক্ষেত্রে:

let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence

আইওএস 12 এবং নীচের জন্য:

এটি করার জন্য, আপনার একটি কাস্টম ছায়া চিত্র সেট করা উচিত। তবে ছায়া চিত্রটি দেখানোর জন্য আপনাকে একটি কাস্টম পটভূমি চিত্রও সেট করতে হবে, অ্যাপলের ডকুমেন্টেশন থেকে উদ্ধৃতি:

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

তাই:

let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
                                                        for: .default)
navigationBar.shadowImage = UIImage()

উপরে এটি লুকানোর একমাত্র "অফিসিয়াল" উপায় way দুর্ভাগ্যক্রমে, এটি বারের স্বচ্ছতা দূর করে।

আমি ব্যাকগ্রাউন্ড ইমেজ চাই না, শুধু রঙ

আপনার কাছে এই বিকল্পগুলি রয়েছে:

  1. সলিড রঙ, কোনও স্বচ্ছলতা নেই:

    navigationBar.barTintColor = UIColor.redColor()
    navigationBar.isTranslucent = false
    navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationBar.shadowImage = UIImage()
  2. রঙে পূর্ণ ছোট পটভূমি চিত্র তৈরি করুন এবং এটি ব্যবহার করুন।

  3. নীচে বর্ণিত 'হ্যাকি' পদ্ধতিটি ব্যবহার করুন। এটি বারের ਪਾਰুচ্ছন্ন রাখবে।

কীভাবে বার আড়াআড়ি রাখবেন?

স্বচ্ছতা বজায় রাখতে আপনার আরও একটি পদ্ধতির প্রয়োজন, এটি হ্যাকের মতো দেখাচ্ছে তবে ভাল কাজ করে। আমরা যে ছায়াটি সরাতে চাইছি তা হ'ল UIImageViewকোথাও নীচে একটি চুলের পাতলা UINavigationBar। প্রয়োজনে আমরা এটি খুঁজে পেতে এবং লুকিয়ে রাখতে / দেখাতে পারি।

নীচের নির্দেশাবলী ধরে ধরে নিন যে আপনার চুলের আড়াআড়ি কেবলমাত্র একটি নিয়ামকের মধ্যে লুকানো আপনার চুলের প্রয়োজন UINavigationController

  1. উদাহরণ ভেরিয়েবল ঘোষণা করুন:

    private var shadowImageView: UIImageView?
  2. পদ্ধতিটি যুক্ত করুন যা এই ছায়া খুঁজে পায় (চুলের পাতায়) UIImageView:

    private func findShadowImage(under view: UIView) -> UIImageView? {
        if view is UIImageView && view.bounds.size.height <= 1 {
            return (view as! UIImageView)
        }
    
        for subview in view.subviews {
            if let imageView = findShadowImage(under: subview) {
                return imageView
            }
        }
        return nil
    }
  3. viewWillAppear/viewWillDisappearপদ্ধতিগুলি যুক্ত / সম্পাদনা করুন :

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        if shadowImageView == nil {
            shadowImageView = findShadowImage(under: navigationController!.navigationBar)
        }
        shadowImageView?.isHidden = true
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        shadowImageView?.isHidden = false
    }

UISearchBarহেয়ারলাইনের জন্যও একই পদ্ধতিটি কাজ করা উচিত এবং আপনার প্রায় কোনও কিছুই লুকানোর দরকার নেই :)

আসল ধারণাটির জন্য @ লিও নাটানকে অনেক ধন্যবাদ!


103
আপনি কেবল UINavigationBarসম্পত্তিটির দর্শন সেট করতে পারেন :clipsToBounds = YES
চতুর

3
@richarddas clipsToBounds = YESএকটি মোহন মত কাজ করে! ধন্যবাদ!
রোমোয়াল্ড

3
ক্লিপটোবাউন্ড সবসময় কিছু লেআউটের জন্য কাজ করে না। এই উত্তরটি আমার পক্ষে নিখুঁতভাবে কাজ করেছে। কেবলমাত্র আমি একটি ইউআইএনএভিগেশনবার সাবক্লাস তৈরি করেছি এবং উপরের কোডটি ব্যবহার করে ছায়া চিত্রটি -আউটআউটসুবিউ পদ্ধতিতে লুকিয়ে রাখতে। ধন্যবাদ!
cgossain

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

2
আইওএস 10-এ মনে হয় কখন viewWillAppear ডাকা হয় আমরা পেতে পারি নাshadowImageView
xi.lin

241

নীচে সহজভাবে সাহায্য করতে পারেন!

সুইফট:

self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")

উদ্দেশ্য গ:

[self.navigationController.navigationBar setValue:@(YES) forKeyPath:@"hidesShadow"];

6
আমি এক্সকোড 8 এ এবং> আইওএস 8 এর বিকাশকারী এবং উপরের কোনওটিই এই ব্যতীত আমার পক্ষে কাজ করেনি।
ভাকাস

2
এছাড়াও এক্সকোড 8 এবং> আইওএস 8 এ এটিই আমার পক্ষে কাজ করেছিল এমন একমাত্র উত্তর।
মেঘমাল

1
এটি কেবলমাত্র সংক্ষিপ্ত এবং সাধারণ উত্তর যা আইওএস 10 এবং এক্সকোড 8.3.1 এর জন্য আমার পক্ষে কাজ করেছিল। ধন্যবাদ মানুষ.
বিশাল সোনাওয়ানে

1
উদ্দেশ্য-সি: স্ব.ব্যাভিগেশন কন্ট্রোলআরএনভিগেশন বার.শাদো আইমেজ = [ইউআইআইজেজ নতুন];
মার্সেলো ডস সান্টোস

1
আইওএস 13.3.1 সংস্করণ আইপ্যাডে কেবল এটিই আমার জন্য কাজ করছে।
রবি

145

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

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init]
                                  forBarPosition:UIBarPositionAny
                                      barMetrics:UIBarMetricsDefault];

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

2
এটি আপনার কোড বেসে প্রতিটি ন্যাভি বারের জন্য এটি বিশ্বব্যাপী সেট করে ... বেশিরভাগ সময় আপনি যা চান তা নয়।
ক্রিস্টফ

97

এটা চেষ্টা কর:

[[UINavigationBar appearance] setBackgroundImage: [UIImage new]  
                                   forBarMetrics: UIBarMetricsDefault];

[UINavigationBar appearance].shadowImage = [UIImage new];

চিত্রের নীচে ব্যাখ্যা রয়েছে (iOS7 নেভিগেশনবার):

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

এবং এই এই প্রশ্নটি পরীক্ষা করুন: আইওএস 7 - ইউআইএনএভিগেশন বারের সীমানার রঙ পরিবর্তন করুন


সেরিই যেমন বলেছিলেন, ছায়া চিত্র গ্রহণ করার জন্য একটি কাস্টম পটভূমি চিত্র সেট করতে হবে।
আকাশিবস্কিয়

3
আপনার AppDelegate এ এটি করুন।
myusuf3

দুর্দান্ত উত্তর ... আমার দিন বাঁচানো হয়েছে _ / \ _
অক্ষয়

@ আরপিএম আইওএস 7,8,9,10 এ দুর্দান্ত কাজ করে। সুইফটের মাঝারি মাধ্যমটিতে ভিউকন্ট্রোলসের নেভিগেশন বারের জন্য একই কোড রয়েছে ।
আখরামিভ

64

সেরহির উত্তরের সুইফট সংস্করণ যুক্ত করতে চেয়েছিলেন। আমি UIBarExtension.swiftনিম্নলিখিতগুলির সাথে একটি তৈরি করেছি :

import Foundation
import UIKit

extension UINavigationBar {
    func hideBottomHairline() {
        self.hairlineImageView?.isHidden = true
    }

    func showBottomHairline() {
        self.hairlineImageView?.isHidden = false
    }
}

extension UIToolbar {
    func hideBottomHairline() {
        self.hairlineImageView?.isHidden = true
    }

    func showBottomHairline() {
        self.hairlineImageView?.isHidden = false
    }
}

extension UIView {
    fileprivate var hairlineImageView: UIImageView? {
        return hairlineImageView(in: self)
    }

    fileprivate func hairlineImageView(in view: UIView) -> UIImageView? {
        if let imageView = view as? UIImageView, imageView.bounds.height <= 1.0 {
            return imageView
        }

        for subview in view.subviews {
            if let imageView = self.hairlineImageView(in: subview) { return imageView }
        }

        return nil
    }
}

ধন্যবাদ! এই এক উত্তর হওয়া উচিত।
পেইউইচেন

এটি নেভিগেশনবারের সাথে কাজ করে তবে ইউটিউলবারের সাথে কাজ করে না
টমসওয়ায়ার

আমি আইওএস 12 দিয়ে সন্ধান করছি এটি আর কাজ করে না । :(।
ক্রিস প্রিন্স

দুর্দান্ত আইওএস 13 কাজ করে
টোটরবিক

এই এক উত্তর হওয়া উচিত।
আইওএস

63

এটি করার দ্রুত উপায়:

UINavigationBar.appearance().setBackgroundImage(
    UIImage(),
    forBarPosition: .Any,
    barMetrics: .Default)

UINavigationBar.appearance().shadowImage = UIImage()

2
সবচেয়ে স্নেহযুক্ত উত্তর সন্ধানের আগে এটিকে তালিকায় নামানো বেশ বিরল। +1 টি!
sudo

3
এটি ইউআইএনএভিগেশন বারের পুরো পটভূমিটি লুকিয়ে রাখে: /
ব্যবহারকারী365314

ভুল, এটি পুরো পটভূমিটিও গোপন করে!
টমসোয়ায়ার

3
দ্রষ্টব্য: আপনাকে নেভিগেশনবারের ট্রান্সলুসেন্টকে মিথ্যাতে সেট করতে হবে
dmathewwws

19

দ্রুত সমাধান সহজ

   let navigationBar = self.navigationController?.navigationBar
    navigationBar?.setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    navigationBar?.shadowImage = UIImage()

3
+1 সমস্ত উত্তরের মধ্যে, শেষ পর্যন্ত আমার পক্ষে এটিই কাজ করেছিল। এটি অন্যান্য উত্তর হিসাবে স্থিতি দণ্ডকে গোলমেলে না, এবং এটি প্রকল্পের সমস্ত নেভিগেশন বার নয়, কেবলমাত্র নেভিগেশন নিয়ামক বারগুলির পরিবর্তনের সমস্যার সমাধান করে।
জোগ্যালিন্ড

? সুইফট 4.2 সংস্করণ: navigationBar .setBackgroundImage (UIImage (), জন্য: UIBarPosition.any, barMetrics: UIBarMetrics.default) navigationBar .shadowImage = UIImage ()?
airowe

16

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

#import "UINavigationBar+Addition.h"

- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationBar *navigationBar = self.navigationController.navigationBar;
    [navigationBar hideBottomHairline];
}

16

সুইফট ৩.০ এ

AppDelegate.swiftআপনার অ্যাপ্লিকেশন কার্যক্রমে নিম্নলিখিত কোড যুক্ত করে আপনার সম্পাদনা করুন :

// Override point for customization after application launch.

// Remove border in navigationBar
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)

16

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

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

    let appearance = UINavigationBarAppearance()
    appearance.shadowImage = nil
    appearance.shadowColor = nil
    navigationController.navigationBar.standardAppearance = appearance

https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage


ছায়া চিত্র এবং ছায়া রঙ UINavigationBarAppearanceশিরোনামে নথিভুক্ত করা হয় না !! আমি এটি কখনও খুঁজে পাব না। ধন্যবাদ, এটি আমার সমস্যাগুলি 100% সমাধান করেছে
রজার ওবা

1
হ্যাঁ এটি আইওএস-এও আমার পক্ষে ভাল কাজ করছে 13 গ্লোটাচ আপনাকে অনেক ধন্যবাদ।
যোগেশ প্যাটেল

@glotcha ঠিক ....
দিগ্বিজয়

ধন্যবাদ। আমার পক্ষে একমাত্র কাজ
alionthego

13

স্টোরিবোর্ড থেকেও লুকানো যেতে পারে (এক্সকোড 10.1 এ কাজ করা)

রানটাইম বৈশিষ্ট্য যুক্ত করে: হাইডস্যাডো - বুলিয়ান - সত্য

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


11

সুইফট ২.০-এর জন্য পিক্সগ্রাফিক্সের সমাধান আপডেট হয়েছে

extension UINavigationBar {

    func hideBottomHairline()
    {
        hairlineImageViewInNavigationBar(self)?.hidden = true
    }

    func showBottomHairline()
    {
        hairlineImageViewInNavigationBar(self)?.hidden = false
    }

    private func hairlineImageViewInNavigationBar(view: UIView) -> UIImageView?
    {
        if let imageView = view as? UIImageView where imageView.bounds.height <= 1
        {
            return imageView
        }

        for subview: UIView in view.subviews
        {
            if let imageView = hairlineImageViewInNavigationBar(subview)
            {
                return imageView
            }
        }

        return nil
    }

}

extension UIToolbar
{

    func hideHairline()
    {
        let navigationBarImageView = hairlineImageViewInToolbar(self)?.hidden = true
    }

    func showHairline()
    {
        let navigationBarImageView = hairlineImageViewInToolbar(self)?.hidden = false
    }

    private func hairlineImageViewInToolbar(view: UIView) -> UIImageView?
    {
        if let imageView = view as? UIImageView where imageView.bounds.height <= 1
        {
            return imageView
        }

        for subview: UIView in view.subviews
        {
            if let imageView = hairlineImageViewInToolbar(subview)
            {
                return imageView
            }
        }

        return nil
    }

}

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

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

এইচএম তাই আমি ঠিক UINavigationController().navigationBar/toolbar.hide/showBottomHairline()তখন ব্যবহার করতে সক্ষম হব ? আমি চেষ্টা করছি কিন্তু কোন ফল হয় নি। আমি কি ঠিক বুঝতে পারছি না?
টমি কে


10

আমি একটি ইউআইএনএভিগেশনবার এক্সটেনশন ব্যবহার করি যা আমাকে ইউআইএআইপিয়ারেন্স এপিআই ব্যবহার করে সেই ছায়াকে লুকিয়ে / দেখায় বা স্টোরিবোর্ড (বা উত্স কোড) ব্যবহার করে কোন ন্যাভিগেশন বারটিকে সেই ছায়াকে লুকিয়ে রাখতে / প্রদর্শন করতে হবে তা নির্বাচন করতে সক্ষম করে। এখানে এক্সটেনশন:

import UIKit

private var flatAssociatedObjectKey: UInt8 = 0

/*
  An extension that adds a "flat" field to UINavigationBar. This flag, when
  enabled, removes the shadow under the navigation bar.
 */
@IBDesignable extension UINavigationBar {
    @IBInspectable var flat: Bool {
        get {
            guard let obj = objc_getAssociatedObject(self, &flatAssociatedObjectKey) as? NSNumber else {
                return false
            }
            return obj.boolValue;
        }

        set {
            if (newValue) {
                let void = UIImage()
                setBackgroundImage(void, forBarPosition: .Any, barMetrics: .Default)
                shadowImage = void
            } else {
                setBackgroundImage(nil, forBarPosition: .Any, barMetrics: .Default)
                shadowImage = nil
            }
            objc_setAssociatedObject(self, &flatAssociatedObjectKey, NSNumber(bool: newValue),
                    objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

এখন, সমস্ত নেভিগেশন বারগুলিতে ছায়াকে অক্ষম করতে আপনাকে ব্যবহার করতে হবে:

UINavigationBar.appearance().flat = true

অথবা আপনি স্টোরিবোর্ডগুলি ব্যবহার করে এই আচরণটি সক্ষম / অক্ষম করতে পারেন:

নেভিগেশন বার স্টোরিবোর্ড


@ নুনোগনালভস, আপনি flatAssociatedObjectKeyআপনার সম্পর্কিত অবজেক্টটি সনাক্ত করতে একটি অনন্য int (পয়েন্টার হিসাবে বিবেচিত) হিসাবে ভাবতে পারেন । এখানে একটি ব্যক্তিগত var এর মেমরি ঠিকানা দ্বারা সংজ্ঞায়িত করা হয়। আমি এই var যোগ করতে প্রতিক্রিয়া আপডেট। আরও তথ্যের জন্য nshipster.com/associated-objects দেখুন ।
আলভিভি

ভাল সমাধান তবে কেবল তখনই কাজ করে যখন নেভিগেশন বারটি translucentমিথ্যাতে সেট করা থাকে
ZYiOS

9

সুইফট 4 পরীক্ষিত ওয়ান লাইন সলিউশন

ইন Viewdidload() সেট ন্যাভিগেশন নিয়ামক এর userdefault কী "hidesShadow" জন্য সত্য মান

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")

}

1
পুরোপুরি কাজ !!
প্রশান্ত টুকাডিয়া

7

সুইফট এটি রাখুন

UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default)
UINavigationBar.appearance().shadowImage = UIImage()

ভিতরে

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

এবং এটি ব্যাকগ্রাউন্ডের রঙও সরিয়ে দেয়।
টমসওয়ায়ার

7

যদি আপনি স্বচ্ছলতা সংরক্ষণ করতে চান এবং আপনি UINavigationControllerআপনার অ্যাপ্লিকেশনটিতে প্রতিটি সাবক্লাস করতে চান না তবে অন্য একটি বিকল্প :

#import <objc/runtime.h>

@implementation UINavigationController (NoShadow)

+ (void)load {
    Method original = class_getInstanceMethod(self, @selector(viewWillAppear:));
    Method swizzled = class_getInstanceMethod(self, @selector(swizzled_viewWillAppear:));
    method_exchangeImplementations(original, swizzled);
}

+ (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
    if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
        return (UIImageView *)view;
    }

    for (UIView *subview in view.subviews) {
        UIImageView *imageView = [self findHairlineImageViewUnder:subview];
        if (imageView) {
            return imageView;
        }
    }

    return nil;
}

- (void)swizzled_viewWillAppear:(BOOL)animated {
    UIImageView *shadow = [UINavigationController findHairlineImageViewUnder:self.navigationBar];
    shadow.hidden = YES;

    [self swizzled_viewWillAppear:animated];
}

@end

6
Slightly Swift Solution 
func setGlobalAppearanceCharacteristics () {
    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.white
    navigationBarAppearace.barTintColor = UIColor.blue
    navigationBarAppearace.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    navigationBarAppearace.shadowImage = UIImage()

}

ধন্যবাদ জেমস! কেউ কেন আপনার উত্তরটি ভোট দিয়েছে তা আমি বুঝতে পারি না।
দানু মিহাই ফ্লোরিয়ান

আপনার যদি এটির প্রয়োজন হয় তবে আপনি এগুলি যোগ করতে পারেন: << স্বতঃ নেভিগেশন কন্ট্রোলআর.ইভিগেশন বার.ট্রান্সলুসেন্ট = মিথ্যা স্ব.নিভিশনকন্ট্রোলআরাইগেশনবারক্লিপস টিউবাউন্ডস = মিথ্যা স্ব.নিভিশনকন্ট্রোলআরভিগেশন বার.স্যাডোআইমেজ = ইউআইআইমেজ () স্ব.ব্যাভিগেশন কন্ট্রোলআরল্যাশন.আরক্লোরোগ্লাগর_আরক্লোরআরগ্রোরোগ্লোর_ক্লোরোগ্লোর ()
আলেসান্দ্রো ওর্নানো

5

সুইফটে 4.2 এ সমাধান :

private func removeHairlineFromNavbar() {
    UINavigationBar.appearance().setBackgroundImage(
        UIImage(),
        for: .any,
        barMetrics: .default)
    UINavigationBar.appearance().shadowImage = UIImage()
}

প্রথম ভিউকন্ট্রোলারে কেবল এই ফাংশনটি রেখে এটিকে কল করুন viewdidload


4

IOS8 এ, আপনি যদি সেট করে UINavigationBar.barStyleথাকেন.Black আপনি সীমান্ত ছাড়া প্লেইন রং হিসেবে বার পটভূমিতে সেট করতে পারেন।

সুইফটে:

UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().barStyle = UIBarStyle.Black
UINavigationBar.appearance().barTintColor = UIColor.redColor()

এটি পরিস্কার করার সর্বোত্তম সমাধান এবং সর্বোত্তম উপায়। আপনার যদি <আইওএস 8 সমর্থন না করে থাকে তবে এই উত্তরটি ব্যবহার না করার কোনও কারণ নেই। ধন্যবাদ।
user3344977

দুর্দান্ত কাজ করে। আমি এটি স্টোরিবোর্ডেও সেট করেছি তাই কোনও কোডেরও দরকার পড়েনি।
ভিকজিলা

1
এটি করা আপনাকে মানক ছায়ার পরিবর্তে খুব ছোট সাদা লাইন দেয়।
Vegard

4

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

navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
self.extendedLayoutIncludesOpaqueBars = true

কেবল
এটিই

3

এখানে একটি খুব সহজ সমাধান:

self.navigationController.navigationBar.clipsToBounds = YES;

37
স্ট্যাটাস বারের অঞ্চলটিও ক্লিপড।
ক্রোধ

3

সহজ সমাধান - সুইফট 5

  1. একটি এক্সটেনশন তৈরি করুন:

    extension UIImage {
    
        class func hideNavBarLine(color: UIColor) -> UIImage? {
    
            let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
            UIGraphicsBeginImageContext(rect.size)
            let context = UIGraphicsGetCurrentContext()
            context?.setFillColor(color.cgColor)
            context?.fill(rect)
    
    
            let navBarLine = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return navBarLine
        }
    }
  2. এটি এতে যুক্ত করুন viewDidLoad():

    self.navigationController?.navigationBar.shadowImage = UIImage.hideNavBarLine(color: UIColor.clear)

2

আইওএস 9 ব্যবহারকারীদের জন্য, এটি আমার পক্ষে কাজ করেছে। শুধু এটি যুক্ত করুন:

UINavigationBar.appearance().shadowImage = UIImage()

2

একটি পটভূমি চিত্র সেট করতে সমস্যা হ'ল এটি ঝাপসা দূর করে। আপনি কোনও পটভূমি চিত্র সেট না করেই এটি সরিয়ে ফেলতে পারেন। আমার উত্তর এখানে দেখুন


2

আপনার ইউআইসন্ধানবারের নীচে একটি দৃশ্য যুক্ত করা উচিত

let rect = searchController.searchBar.frame;
let lineView : UIView = UIView.init(frame: CGRect.init(x: 0, y: rect.size.height-1, width: rect.size.width, height: 1))
lineView.backgroundColor = UIColor.init(hexString: "8CC73E")
searchController.searchBar.addSubview(lineView)

আমি বিশ্বাস করতে পারি না এটি এখনও একটি সমস্যা - এটি আবার এসেছিল! তবে এই সমাধানটি এই মুহূর্তে সেরা সম্ভাব্য; ধন্যবাদ @ সোশিট
রিচ অ্যাপজ

1

আমি জানি এটি একটি পুরানো থ্রেড, তবে আমি এমন একটি সমাধান পেয়েছি যা সত্যিই ভালভাবে কাজ করে:

সাবক্লাস ইউআইএনএভিগেশন বার। আপনার ইউআইএনএভিগেশনবার সাবক্লাসে, নিম্নলিখিত কোডের সাহায্যে ওভাররাইড করুনডডব্লুভিউ:

- (void)didAddSubview:(UIView *)subview
{
    [super didAddSubview:subview];

    if ([subview isKindOfClass:[UIImageView class]]) {
        [subview setClipsToBounds:YES];
    }
}

1

আমি এর জন্য মাত্র একটি এক্সটেনশান তৈরি করেছি ... ফর্ম্যাট করার জন্য দুঃখিত (এটি আমার প্রথম উত্তর)।

ব্যবহার:

  override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.hideShadow = true
}

এক্সটেনশান:

 UINavigationController.swift
//  Created by Ricardo López Rey on 16/7/15.

import Foundation


struct UINavigationControllerExtension {
    static var hideShadowKey : String = "HideShadow"
static let backColor = UIColor(red: 247/255, green: 247/255, blue: 248/255, alpha: 1.0)
}

extension UINavigationController {

    var hideShadow : Bool {
        get {
            if let ret =  objc_getAssociatedObject(self, &UINavigationControllerExtension.hideShadowKey) as? Bool {
                return ret
            } else {
                return false
            }


        }
        set {
            objc_setAssociatedObject(self,&UINavigationControllerExtension.hideShadowKey,newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))

            if newValue {


            self.navigationBar.setBackgroundImage(solidImage(UINavigationControllerExtension.backColor), forBarMetrics: UIBarMetrics.Default)

                self.navigationBar.shadowImage = solidImage(UIColor.clearColor())
            } else {
                self.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
            }
        }
    }

    private func solidImage(color: UIColor, size: CGSize = CGSize(width: 1,height: 1)) -> UIImage {
        var rect = CGRectMake(0, 0, size.width, size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(rect)
        var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }


}

1

অ্যাপডেলিগেটের মধ্যে , এটি বিশ্বব্যাপী নাভবারের ফর্ম্যাটটি পরিবর্তন করেছে:

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

    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().barTintColor = UIColor.redColor()
    UINavigationBar.appearance().translucent = false
    UINavigationBar.appearance().clipsToBounds = false
    UINavigationBar.appearance().backgroundColor = UIColor.redColor()
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }

নির্দিষ্ট ভিসিতে ভিন্ন কিছু বাস্তবায়ন করতে পরিচালিত হয়নি, তবে এটি 90% লোককে সহায়তা করবে


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

    UIImage *emptyImage = [UIImage new];
    self.navigationController.navigationBar.shadowImage = emptyImage;
    [self.navigationController.navigationBar setBackgroundImage:emptyImage forBarMetrics:UIBarMetricsDefault];
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.