【问题标题】:Swift How remove searchController bottom border?Swift 如何删除 searchController 底部边框?
【发布时间】:2019-07-13 11:35:52
【问题描述】:

这个页面有tableView和SearchController。我的问题是 searchController 边框。我无法删除边框

我试过了: 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?

           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

如何解决这个问题?有人有想法吗?

【问题讨论】:

  • 这是导航栏分隔视图而不是 SearchBar。再次检查
  • 试试这个:让 navigationBar = navigationController!.navigationBar navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"), for: .default) navigationBar.shadowImage = UIImage()
  • 感谢您的回答。当你删除它 SearchController 迷路了。您的代码输出:imgur.com/nQ8ogmx

标签: ios swift border searchbar


【解决方案1】:

一种解决方案是将导航栏的背景和阴影图像设置为空图像。

我又做了一个改动,只是评论

navigationItem.largeTitleDisplayMode = .never

并添加这两行

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

这里是完整的代码:

 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()
    }
}

请检查更新的代码。

【讨论】:

  • 感谢@rmaddy 的回答。我这样做了,输出仍然相同。你的代码imgur.com/GqljhkG,输出:imgur.com/nQ8ogmx
  • @yusufdemirkoparan 不是我的答案。我刚刚进行了编辑。
  • @rmaddy 啊抱歉 :)。感谢 Sumit Garg 的回答。
  • 检查更新的评论,我在示例项目中尝试了这段代码,它正在工作。
  • @SumitGarg 你好 Sumit 你可以分享我你的示例项目吗?
【解决方案2】:

创建 UISearchController 的扩展:

extension UISearchController {

var hairlineView: UIView? {
    let barBackgroundView = searchBar.superview?.subviews.first { String(describing: type(of: $0)) == "_UIBarBackground" }
    
    guard let background = barBackgroundView else { return nil }
    return background.subviews.first { $0.bounds.height == 1 / self.traitCollection.displayScale }
    } 
}

在视图中调用这个将布局子视图:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    self.navigationItem.searchController?.hairlineView?.isHidden = true
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2023-03-26
    • 2018-06-13
    • 2013-10-20
    相关资源
    最近更新 更多