Search code examples
iosswiftbordersearchbar

Swift How remove searchController bottom border?


This page has tableView and SearchController. My problem is searchController borders. I can't remove borders

I tried: Remove border between View and Search Bar

Remove navigation bar bottom line when using search controller

Remove 1px line at top of UISearchController in large titles UINavigationBar

How to hide UINavigationBar 1px bottom line

How can I remove border bottom of UINavigationBar?

enter image description here

           if #available(iOS 11.0, *) {
                   let scb = searchController.searchBar
                   scb.tintColor = UIColor.white
                   scb.barTintColor = UIColor.white
                   scb.layer.masksToBounds = true
                   scb.layer.borderWidth = 10
                   scb.layer.borderColor = UIColor.clear.cgColor

                   if let textfield = scb.value(forKey: "searchField") as? UITextField {
                       textfield.layer.borderWidth = 2
                       textfield.layer.borderColor = UIColor.clear.cgColor
                       //textfield.textColor = // Set text color
                       if let backgroundview = textfield.subviews.first {
                           // Background color
                           backgroundview.backgroundColor = UIColor.white
                           backgroundview.layer.borderWidth = 0

                           backgroundview.layer.borderColor = UIColor.clear.cgColor
                           // Rounded corner
                           backgroundview.layer.cornerRadius = 10;
                           backgroundview.clipsToBounds = true;
                       }
                   }
                   if let navigationbar = self.navigationController?.navigationBar {
                       navigationbar.barTintColor = UIColor.clear
                   }
                               navigationItem.hidesSearchBarWhenScrolling = false

               }
                navigationItem.searchController = searchController

       navigationItem.largeTitleDisplayMode = .never

       self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white,NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18, weight: .bold) ]
       searchController.obscuresBackgroundDuringPresentation = false
       searchController.searchBar.placeholder = "Search Candies"
       navigationItem.searchController = searchController
       definesPresentationContext = true

How fix this issue? Any has idea?


Solution

  • One solution is to set the navigation bar's background and shadow images to an empty image.

    i did one more change, just comment

    navigationItem.largeTitleDisplayMode = .never

    and Add these two line

    navigationbar.setBackgroundImage(UIImage(), for: .default) navigationbar.shadowImage = UIImage()

    Here is the complete code :

     if #available(iOS 11.0, *) {
                let scb = searchController.searchBar
                scb.tintColor = UIColor.white
                scb.barTintColor = UIColor.white
                scb.layer.masksToBounds = true
                scb.layer.borderWidth = 10
                scb.layer.borderColor = UIColor.clear.cgColor
    
                if let textfield = scb.value(forKey: "searchField") as? UITextField {
                    textfield.layer.borderWidth = 2
                    textfield.layer.borderColor = UIColor.clear.cgColor
                    //textfield.textColor = // Set text color
                    if let backgroundview = textfield.subviews.first {
                        // Background color
                        backgroundview.backgroundColor = UIColor.white
                        backgroundview.layer.borderWidth = 0
    
                        backgroundview.layer.borderColor = UIColor.clear.cgColor
                        // Rounded corner
                        backgroundview.layer.cornerRadius = 10;
                        backgroundview.clipsToBounds = true;
                    }
                }
                if let navigationbar = self.navigationController?.navigationBar {
                    navigationbar.barTintColor = UIColor.white
                    navigationbar.setBackgroundImage(UIImage(), for: .default)
                    navigationbar.shadowImage = UIImage()
    
                }
                navigationItem.hidesSearchBarWhenScrolling = false
            }
    
    //        navigationItem.largeTitleDisplayMode = .never
            self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white,NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18, weight: .bold) ]
            searchController.obscuresBackgroundDuringPresentation = false
            searchController.searchBar.placeholder = "Search Candies"
            navigationItem.searchController = searchController
            definesPresentationContext = true
    
    
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    
        if let navigationbar = self.navigationController?.navigationBar {
            navigationbar.setBackgroundImage(UIImage(), for: .default)
            navigationbar.shadowImage = UIImage()
        }
    }
    

    Please check updated code.