移除 UISearchBar 的上下边框和阴影?
Posted
技术标签:
【中文标题】移除 UISearchBar 的上下边框和阴影?【英文标题】:Remove top and bottom border of UISearchBar and shadow? 【发布时间】:2015-10-15 11:05:26 【问题描述】:我创建了一个带有 UISearchBar 的 .xib。
我希望删除此图像中的顶部和底部边框:
在顶部边框下方还有一个看起来像阴影的东西。
我尝试过更改背景/色调等,但很难让它消失。
欢迎任何帮助,有什么想法吗?
编辑
所以下面的代码可以让我摆脱顶部和底部的边框,但不能摆脱奇怪的阴影。我添加了绿色背景以更清晰地显示它。
另外,在文本框(而不是视图)周围添加边框的最佳方法是什么?谢谢
//** 这就是我想要做的:https://***.com/questions/33107058/uiviewcontroller-sizing-as-maincontroller-within-uisplitviewcontroller
这是我正在使用的代码。
import UIKit
class TopSearchViewController: UIView
var expanded: Int = 0
@IBOutlet weak var trailingConstraint: NSLayoutConstraint!
@IBOutlet var contentView: UIView!
@IBOutlet weak var searchBar: UISearchBar!
@IBAction func advancedSearchButton(sender: AnyObject)
if expanded == 0
self.layoutIfNeeded()
UIView.animateWithDuration(0.1, animations:
self.trailingConstraint.constant = 200
self.layoutIfNeeded()
)
expanded = 1
else
self.layoutIfNeeded()
UIView.animateWithDuration(0.1, animations:
self.trailingConstraint.constant = 25
self.layoutIfNeeded()
)
expanded = 0
override init(frame: CGRect) // for using CustomView in code
super.init(frame: frame)
self.commonInit()
required init(coder aDecoder: NSCoder) // for using CustomView in IB
super.init(coder: aDecoder)
self.commonInit()
private func commonInit()
NSBundle.mainBundle().loadNibNamed("TopSearchViewController", owner: self, options: nil)
contentView.frame = self.bounds
contentView.autoresizingMask = .FlexibleHeight | .FlexibleWidth
self.addSubview(contentView)
self.searchBar.layer.borderWidth = 1
self.searchBar.layer.borderColor = UIColor.whiteColor().CGColor
println(searchBar)
for subview in searchBar.subviews
println("hello")
var textField : UITextField
if (subview.isKindOfClass(UITextField))
textField = subview as! UITextField
textField.borderStyle = .None
textField.layer.borderWidth = 1
textField.layer.borderColor = UIColor.lightGrayColor().CGColor
textField.layer.cornerRadius = 14
textField.background = nil;
textField.backgroundColor = UIColor.whiteColor()
func viewDidLoad()
【问题讨论】:
【参考方案1】:将栏的backgroundImage
设置为空 UIImage
,不是 nil
:
searchBar.backgroundImage = UIImage()
您也可以设置barTintColor
,正如您在下面的评论中指定的那样。
【讨论】:
精湛 :) 好主意 :) tq 这对我不起作用,因为在将 backgroundImage 设置为空 UIImage 后 barTintColor 不会占用 @GregHilston,但这不是 OP 的问题。如果您想要一个稍微半透明的彩色条,那么您需要将backgroundImage
设置为您以编程方式创建并设置为所需颜色的非空UIImage
。 (您不能在 Interface Builder 中设置图像的颜色。)
@NRitHOh 伙计,我完全误读了 OP 的问题。感谢您的后续评论!
这仍然适用于 ios 13,并且似乎是我能找到的唯一可靠工作的东西。另一种将视图重叠 1px 的方法更有可能因布局更改或这些元素的大小随 iOS 版本更改而发生更改而中断。谢谢!【参考方案2】:
使用 Xcode 11,您可以在 Storyboard 中将“搜索样式”设置为“最小”。
在代码中:searchBar.searchBarStyle = .minimal
【讨论】:
帮助移除了上下边框。谢谢! 这为我删除了出现在搜索栏和选定范围按钮附件视图之间的边框,当视图以较大的可访问性类型大小显示时,他在此处回答的另一种方法并未隐藏.所以谢谢!【参考方案3】:所有的答案我都试过了,都没有去掉UISearchBar的UITextfield里面1px的内阴影。
我通过增加白色边框的宽度解决了这个问题。 它与阴影重叠。
searchBar.layer.borderWidth = 10
searchBar.layer.borderColor = UIColor.white.cgColor
【讨论】:
【参考方案4】:试试这个:
searchBar.layer.borderWidth = 1
searchBar.layer.borderColor = UIColor.whiteColor().CGColor
编辑:
我相信阴影是由内部UITextField
引起的。试试下面的代码:
var textField : UITextField
for subview in searchBar.subviews
if (subview.isKindOfClass(UITextField))
textField = subview as! UITextField
textField.borderStyle = .None
textField.layer.borderWidth = 1
textField.layer.borderColor = UIColor.lightGrayColor().CGColor
textField.layer.cornerRadius = 14
textField.background = nil;
textField.backgroundColor = UIColor.whiteColor()
【讨论】:
所以我确实在 viewDidLoad 中尝试过,但是在将它放在其他地方之后,它现在可以工作了。然而,这只去掉了上面和下面的线,而不是奇怪的色调。 (我知道它与色调有关,因为如果我将其更改为白色,它就会消失) 请看我编辑的帖子。我想我回答了你原来的问题,这应该是公认的答案。 这似乎对我不起作用。请查看我的更新代码。【参考方案5】:#方法一
感谢@andrewlundy,Storyboard 方法是这样的。 (Xcode 11.*)
在 storyboard 中选择 UISearch(假设:你已经将一个 UISearch Bar 拖到你的 UIView/UIViewController)
转到Attribute Inspector
,你会看到Search Style
从Search Style
下拉列表中选择Minimal
。
就是这样……
#方法二
否则如果您想以编程方式执行此操作,请快速
在你的 ViewController swift 文件中为 UISearch 创建一个IBOutlet
searchBar.searchBarStyle = .minimal
这里不是searchBar
,而是your UISearch outlet's name
【讨论】:
【参考方案6】:还有一个技巧:
对于底部边框,您可以通过-1像素的波纹视图(例如:tableView)将其覆盖。
对于顶部边框,将其向上移动 1 个像素到导航栏下方也可以解决此问题。
【讨论】:
【参考方案7】:我在swift5中使用了以下代码来实现搜索栏
-
列表项
let searchbar: UISearchBar =
let sear = UISearchBar()
sear.tintColor = Mycolor().lightgray1
sear.backgroundColor = Mycolor().lightgray1
sear.barTintColor = Mycolor().lightgray1
sear.placeholder = "Search Asset"
sear.layer.cornerRadius = 30
sear.barStyle = .default
sear.backgroundImage = UIImage()
// sear.addShadow(offset: CGSize(width: 10, height: 10), color: UIColor.darkGray, radius: 20, opacity: 5)
return sear
()
override func viewDidLoad()
super.viewDidLoad()
self.view.addSubview(searchbar)
override func viewLayoutMarginsDidChange()
self.searchbar.frame = CGRect(x: 10, y: 20, width: self.view.frame.width - 20, height: 50)
【讨论】:
【参考方案8】:guard let searchTextField = searchBar.value(forKey: "searchField") as? UITextField 其他 返回 searchTextField.borderStyle = .none
如果你想完全移除边框 斯威夫特 5
【讨论】:
【参考方案9】:尝试searchTextField
属性以获得最低部署目标 iOS 13,以防其他建议的选项不适合您。
if #available(iOS 13.0, *)
searchBar.searchTextField.backgroundColor = UIColor.clear
searchBar.searchTextField.borderStyle = .none
【讨论】:
以上是关于移除 UISearchBar 的上下边框和阴影?的主要内容,如果未能解决你的问题,请参考以下文章