此页面具有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
如何解决此问题?有想法吗?
答案 0 :(得分:1)
一种解决方案是将导航栏的背景和阴影图像设置为空图像。
我又做了一个更改,只是发表评论
navigationItem.largeTitleDisplayMode =。从不
并添加这两行
navigationbar.setBackgroundImage(UIImage(),用于:.default) navigationbar.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()
}
}
请检查更新的代码。
答案 1 :(得分:0)
创建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
}